@epilot/spark-ui 0.16.0 → 0.16.1

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 (174) hide show
  1. package/dist/components/accordion.cjs +3 -6
  2. package/dist/components/accordion.cjs.map +1 -1
  3. package/dist/components/accordion.d.ts +1 -1
  4. package/dist/components/accordion.js +3 -6
  5. package/dist/components/accordion.js.map +1 -1
  6. package/dist/components/alert-dialog.cjs +2 -5
  7. package/dist/components/alert-dialog.cjs.map +1 -1
  8. package/dist/components/alert-dialog.js +2 -5
  9. package/dist/components/alert-dialog.js.map +1 -1
  10. package/dist/components/bar-chart.cjs +1 -1
  11. package/dist/components/bar-chart.js +2 -2
  12. package/dist/components/battery-progress-row.cjs +14 -11
  13. package/dist/components/battery-progress-row.cjs.map +1 -1
  14. package/dist/components/battery-progress-row.d.cts +2 -10
  15. package/dist/components/battery-progress-row.d.ts +2 -10
  16. package/dist/components/battery-progress-row.js +14 -11
  17. package/dist/components/battery-progress-row.js.map +1 -1
  18. package/dist/components/bubble.d.cts +1 -1
  19. package/dist/components/bubble.d.ts +1 -1
  20. package/dist/components/button.cjs +6 -6
  21. package/dist/components/button.cjs.map +1 -1
  22. package/dist/components/button.d.cts +3 -3
  23. package/dist/components/button.d.ts +3 -3
  24. package/dist/components/button.js +6 -6
  25. package/dist/components/button.js.map +1 -1
  26. package/dist/components/calendar.cjs +4 -5
  27. package/dist/components/calendar.cjs.map +1 -1
  28. package/dist/components/calendar.js +4 -5
  29. package/dist/components/calendar.js.map +1 -1
  30. package/dist/components/callout.cjs +18 -14
  31. package/dist/components/callout.cjs.map +1 -1
  32. package/dist/components/callout.d.cts +10 -4
  33. package/dist/components/callout.d.ts +10 -4
  34. package/dist/components/callout.js +18 -15
  35. package/dist/components/callout.js.map +1 -1
  36. package/dist/components/device-card.cjs +2 -6
  37. package/dist/components/device-card.cjs.map +1 -1
  38. package/dist/components/device-card.d.cts +3 -3
  39. package/dist/components/device-card.d.ts +3 -3
  40. package/dist/components/device-card.js +2 -6
  41. package/dist/components/device-card.js.map +1 -1
  42. package/dist/components/dialog.cjs +2 -5
  43. package/dist/components/dialog.cjs.map +1 -1
  44. package/dist/components/dialog.js +2 -5
  45. package/dist/components/dialog.js.map +1 -1
  46. package/dist/components/dropdown-menu.cjs +4 -13
  47. package/dist/components/dropdown-menu.cjs.map +1 -1
  48. package/dist/components/dropdown-menu.js +4 -13
  49. package/dist/components/dropdown-menu.js.map +1 -1
  50. package/dist/components/empty-state.cjs +5 -5
  51. package/dist/components/empty-state.cjs.map +1 -1
  52. package/dist/components/empty-state.d.cts +3 -3
  53. package/dist/components/empty-state.d.ts +3 -3
  54. package/dist/components/empty-state.js +5 -5
  55. package/dist/components/empty-state.js.map +1 -1
  56. package/dist/components/icon.cjs +2 -3
  57. package/dist/components/icon.cjs.map +1 -1
  58. package/dist/components/icon.d.cts +0 -3
  59. package/dist/components/icon.d.ts +0 -3
  60. package/dist/components/icon.js +2 -3
  61. package/dist/components/icon.js.map +1 -1
  62. package/dist/components/info-block.d.cts +1 -1
  63. package/dist/components/info-block.d.ts +1 -1
  64. package/dist/components/input-otp.cjs +1 -1
  65. package/dist/components/input-otp.js +1 -1
  66. package/dist/components/input.cjs +1 -1
  67. package/dist/components/input.js +1 -1
  68. package/dist/components/line-chart.cjs +3 -3
  69. package/dist/components/line-chart.js +4 -4
  70. package/dist/components/list.cjs.map +1 -1
  71. package/dist/components/list.js.map +1 -1
  72. package/dist/components/marker.d.cts +1 -1
  73. package/dist/components/marker.d.ts +1 -1
  74. package/dist/components/message-scroller.cjs +3 -3
  75. package/dist/components/message-scroller.cjs.map +1 -1
  76. package/dist/components/message-scroller.js +3 -3
  77. package/dist/components/message-scroller.js.map +1 -1
  78. package/dist/components/metering-row.cjs +3 -3
  79. package/dist/components/metering-row.cjs.map +1 -1
  80. package/dist/components/metering-row.d.cts +3 -3
  81. package/dist/components/metering-row.d.ts +3 -3
  82. package/dist/components/metering-row.js +3 -3
  83. package/dist/components/metering-row.js.map +1 -1
  84. package/dist/components/money-saved-block.cjs +2 -5
  85. package/dist/components/money-saved-block.cjs.map +1 -1
  86. package/dist/components/money-saved-block.js +2 -5
  87. package/dist/components/money-saved-block.js.map +1 -1
  88. package/dist/components/on-off-button.cjs +2 -5
  89. package/dist/components/on-off-button.cjs.map +1 -1
  90. package/dist/components/on-off-button.js +2 -5
  91. package/dist/components/on-off-button.js.map +1 -1
  92. package/dist/components/page-header.cjs +2 -2
  93. package/dist/components/page-header.cjs.map +1 -1
  94. package/dist/components/page-header.d.cts +1 -1
  95. package/dist/components/page-header.d.ts +1 -1
  96. package/dist/components/page-header.js +2 -2
  97. package/dist/components/page-header.js.map +1 -1
  98. package/dist/components/period-tabs.cjs +3 -6
  99. package/dist/components/period-tabs.cjs.map +1 -1
  100. package/dist/components/period-tabs.js +3 -6
  101. package/dist/components/period-tabs.js.map +1 -1
  102. package/dist/components/pill.cjs +2 -5
  103. package/dist/components/pill.cjs.map +1 -1
  104. package/dist/components/pill.js +2 -5
  105. package/dist/components/pill.js.map +1 -1
  106. package/dist/components/power-history-chart.cjs +3 -3
  107. package/dist/components/power-history-chart.js +4 -4
  108. package/dist/components/power-history.cjs +1 -1
  109. package/dist/components/power-history.js +1 -1
  110. package/dist/components/power-network.cjs +2 -5
  111. package/dist/components/power-network.cjs.map +1 -1
  112. package/dist/components/power-network.js +2 -5
  113. package/dist/components/power-network.js.map +1 -1
  114. package/dist/components/sankey-chart.cjs +56 -71
  115. package/dist/components/sankey-chart.cjs.map +1 -1
  116. package/dist/components/sankey-chart.js +56 -71
  117. package/dist/components/sankey-chart.js.map +1 -1
  118. package/dist/components/schedule-list.cjs +3 -9
  119. package/dist/components/schedule-list.cjs.map +1 -1
  120. package/dist/components/schedule-list.js +3 -9
  121. package/dist/components/schedule-list.js.map +1 -1
  122. package/dist/components/select.cjs +6 -18
  123. package/dist/components/select.cjs.map +1 -1
  124. package/dist/components/select.js +6 -18
  125. package/dist/components/select.js.map +1 -1
  126. package/dist/components/sheet.cjs +2 -5
  127. package/dist/components/sheet.cjs.map +1 -1
  128. package/dist/components/sheet.js +2 -5
  129. package/dist/components/sheet.js.map +1 -1
  130. package/dist/components/slider.cjs +9 -3
  131. package/dist/components/slider.cjs.map +1 -1
  132. package/dist/components/slider.js +9 -3
  133. package/dist/components/slider.js.map +1 -1
  134. package/dist/components/smart-toggle-button.cjs +2 -5
  135. package/dist/components/smart-toggle-button.cjs.map +1 -1
  136. package/dist/components/smart-toggle-button.js +2 -5
  137. package/dist/components/smart-toggle-button.js.map +1 -1
  138. package/dist/components/solar-forecast-chart.cjs +8 -9
  139. package/dist/components/solar-forecast-chart.cjs.map +1 -1
  140. package/dist/components/solar-forecast-chart.d.cts +2 -2
  141. package/dist/components/solar-forecast-chart.d.ts +2 -2
  142. package/dist/components/solar-forecast-chart.js +9 -10
  143. package/dist/components/solar-forecast-chart.js.map +1 -1
  144. package/dist/components/stepper.cjs +3 -9
  145. package/dist/components/stepper.cjs.map +1 -1
  146. package/dist/components/stepper.js +3 -9
  147. package/dist/components/stepper.js.map +1 -1
  148. package/dist/components/tabs.cjs +2 -2
  149. package/dist/components/tabs.cjs.map +1 -1
  150. package/dist/components/tabs.js +2 -2
  151. package/dist/components/tabs.js.map +1 -1
  152. package/dist/components/textarea.cjs +1 -1
  153. package/dist/components/textarea.js +1 -1
  154. package/dist/components/toast.cjs +9 -12
  155. package/dist/components/toast.cjs.map +1 -1
  156. package/dist/components/toast.js +9 -12
  157. package/dist/components/toast.js.map +1 -1
  158. package/dist/components/tooltip.cjs +2 -5
  159. package/dist/components/tooltip.cjs.map +1 -1
  160. package/dist/components/tooltip.js +2 -5
  161. package/dist/components/tooltip.js.map +1 -1
  162. package/dist/styles/index.css +0 -2
  163. package/package.json +3 -10
  164. package/dist/icons/index.cjs +0 -7
  165. package/dist/icons/index.d.cts +0 -4
  166. package/dist/icons/index.d.ts +0 -4
  167. package/dist/icons/index.js +0 -3
  168. package/dist/icons/material-symbol.cjs +0 -106
  169. package/dist/icons/material-symbol.cjs.map +0 -1
  170. package/dist/icons/material-symbol.d.cts +0 -21
  171. package/dist/icons/material-symbol.d.ts +0 -21
  172. package/dist/icons/material-symbol.js +0 -102
  173. package/dist/icons/material-symbol.js.map +0 -1
  174. package/dist/styles/material-symbol.css +0 -25
@@ -1 +1 @@
1
- {"version":3,"file":"message-scroller.cjs","names":["React","LazyMotion","domAnimation","MessageScrollerPrimitive","useReducedMotion","MESSAGE_ANIMATIONS","Button","MaterialSymbol"],"sources":["../../src/components/message-scroller.tsx"],"sourcesContent":["import {\n MessageScroller as MessageScrollerPrimitive,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n} from '@shadcn/react/message-scroller'\nimport { LazyMotion, domAnimation } from 'motion/react'\nimport { create } from 'motion/react-m'\nimport * as React from 'react'\nimport { useReducedMotion } from '../hooks/use-reduced-motion'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { MESSAGE_ANIMATIONS } from '../lib/message-animations'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\n\nconst MessageScrollerAnimationReadyContext = React.createContext(false)\nconst MotionDiv = create('div')\n\ntype MessageScrollerItemProps = Omit<\n React.ComponentProps<typeof MessageScrollerPrimitive.Item>,\n | 'animate'\n | 'exit'\n | 'initial'\n | 'variants'\n | 'onAnimationStart'\n | 'onDrag'\n | 'onDragStart'\n | 'onDragEnd'\n | 'onDragTransitionEnd'\n>\n\nfunction MessageScrollerProvider(\n props: React.ComponentProps<typeof MessageScrollerPrimitive.Provider>,\n) {\n const [ready, setReady] = React.useState(false)\n\n React.useEffect(() => {\n setReady(true)\n }, [])\n\n return (\n <LazyMotion features={domAnimation} strict>\n <MessageScrollerAnimationReadyContext.Provider value={ready}>\n <MessageScrollerPrimitive.Provider {...props} />\n </MessageScrollerAnimationReadyContext.Provider>\n </LazyMotion>\n )\n}\n\nfunction MessageScroller({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Root>) {\n return (\n <MessageScrollerPrimitive.Root\n data-slot=\"message-scroller\"\n className={cn(\n 'group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerViewport({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Viewport>) {\n return (\n <MessageScrollerPrimitive.Viewport\n data-slot=\"message-scroller-viewport\"\n // scroll-fade-b is a spark-adopted shadcn utility; scrollbar-width/gutter\n // are arbitrary props (spark ships no scrollbar-* utilities) and the native\n // bar collapses to no-scrollbar (spark util) while autoscrolling.\n className={cn(\n 'size-full min-h-0 min-w-0 scroll-fade-b overflow-y-auto overscroll-contain contain-content [scrollbar-gutter:stable] [scrollbar-width:thin] focus-visible:ring-2 focus-visible:ring-spark-11 focus-visible:ring-offset-2 focus-visible:outline-hidden data-autoscrolling:no-scrollbar',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerContent({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Content>) {\n return (\n <MessageScrollerPrimitive.Content\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-8', className)}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerItem({\n className,\n scrollAnchor = false,\n children,\n ...props\n}: MessageScrollerItemProps) {\n const ready = React.useContext(MessageScrollerAnimationReadyContext)\n const shouldReduceMotion = useReducedMotion()\n const skipEntrance = !ready || shouldReduceMotion\n\n return (\n <MessageScrollerPrimitive.Item\n {...props}\n data-slot=\"message-scroller-item\"\n scrollAnchor={scrollAnchor}\n className={cn(\n 'min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]',\n className,\n )}\n >\n <MotionDiv\n className=\"w-full min-w-0\"\n variants={MESSAGE_ANIMATIONS['slide-up'].variants}\n initial={skipEntrance ? false : 'initial'}\n animate=\"animate\"\n exit={skipEntrance ? undefined : 'exit'}\n >\n {children}\n </MotionDiv>\n </MessageScrollerPrimitive.Item>\n )\n}\n\n// Renders a spark <Button> via `render`, so its `styleVariant`/`color`/`size`\n// recipe paints the chrome — we only add positioning + the enter/leave animation\n// keyed off the primitive's data-[active] state. Icon is a MaterialSymbol (spark's\n// icon set), pointing down for `end` and up for `start`.\nfunction MessageScrollerButton({\n direction = 'end',\n className,\n children,\n render,\n styleVariant = 'surface',\n color = 'neutral',\n size = 'icon-small',\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Button> &\n Pick<ButtonProps, 'styleVariant' | 'color' | 'size'>) {\n return (\n <MessageScrollerPrimitive.Button\n data-slot=\"message-scroller-button\"\n data-direction={direction}\n direction={direction}\n className={cn(\n 'absolute inset-s-1/2 -translate-x-1/2 rounded-full transition-[translate,scale,opacity] duration-200 data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full motion-reduce:transition-none rtl:translate-x-1/2',\n className,\n )}\n render={\n render ?? (\n <Button styleVariant={styleVariant} color={color} size={size} />\n )\n }\n {...props}\n >\n {children ?? (\n <>\n <MaterialSymbol\n name={direction === 'end' ? 'arrow_downward' : 'arrow_upward'}\n />\n <span className=\"sr-only\">\n {direction === 'end' ? 'Scroll to end' : 'Scroll to start'}\n </span>\n </>\n )}\n </MessageScrollerPrimitive.Button>\n )\n}\n\nexport {\n MessageScroller,\n MessageScrollerButton,\n MessageScrollerContent,\n MessageScrollerItem,\n MessageScrollerProvider,\n MessageScrollerViewport,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAM,uCAAuCA,MAAM,cAAc,KAAK;AACtE,MAAM,aAAA,GAAA,eAAA,QAAmB,KAAK;AAe9B,SAAS,wBACP,OACA;CACA,MAAM,CAAC,OAAO,YAAYA,MAAM,SAAS,KAAK;CAE9C,MAAM,gBAAgB;EACpB,SAAS,IAAI;CACf,GAAG,CAAC,CAAC;CAEL,OACE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,YAAD;EAAY,UAAUC,aAAAA;EAAc,QAAA;YAClC,iBAAA,GAAA,kBAAA,KAAC,qCAAqC,UAAtC;GAA+C,OAAO;aACpD,iBAAA,GAAA,kBAAA,KAACC,+BAAAA,gBAAyB,UAA1B,EAAmC,GAAI,MAAQ,CAAA;EACF,CAAA;CACrC,CAAA;AAEhB;AAEA,SAAS,gBAAgB,EACvB,WACA,GAAG,SAC0D;CAC7D,OACE,iBAAA,GAAA,kBAAA,KAACA,+BAAAA,gBAAyB,MAA1B;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IACE,mFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,wBAAwB,EAC/B,WACA,GAAG,SAC8D;CACjE,OACE,iBAAA,GAAA,kBAAA,KAACA,+BAAAA,gBAAyB,UAA1B;EACE,aAAU;EAIV,YAAA,GAAA,OAAA,IACE,yRACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,iBAAA,GAAA,kBAAA,KAACA,+BAAAA,gBAAyB,SAA1B;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IAAc,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,oBAAoB,EAC3B,WACA,eAAe,OACf,UACA,GAAG,SACwB;CAC3B,MAAM,QAAQH,MAAM,WAAW,oCAAoC;CACnE,MAAM,qBAAqBI,iCAAAA,iBAAiB;CAC5C,MAAM,eAAe,CAAC,SAAS;CAE/B,OACE,iBAAA,GAAA,kBAAA,KAACD,+BAAAA,gBAAyB,MAA1B;EACE,GAAI;EACJ,aAAU;EACI;EACd,YAAA,GAAA,OAAA,IACE,kFACA,SACF;YAEA,iBAAA,GAAA,kBAAA,KAAC,WAAD;GACE,WAAU;GACV,UAAUE,+BAAAA,mBAAmB,YAAY;GACzC,SAAS,eAAe,QAAQ;GAChC,SAAQ;GACR,MAAM,eAAe,KAAA,IAAY;GAEhC;EACQ,CAAA;CACkB,CAAA;AAEnC;AAMA,SAAS,sBAAsB,EAC7B,YAAY,OACZ,WACA,UACA,QACA,eAAe,WACf,QAAQ,WACR,OAAO,cACP,GAAG,SAEmD;CACtD,OACE,iBAAA,GAAA,kBAAA,KAACF,+BAAAA,gBAAyB,QAA1B;EACE,aAAU;EACV,kBAAgB;EACL;EACX,YAAA,GAAA,OAAA,IACE,ypBACA,SACF;EACA,QACE,UACE,iBAAA,GAAA,kBAAA,KAACG,0BAAAA,QAAD;GAAsB;GAAqB;GAAa;EAAO,CAAA;EAGnE,GAAI;YAEH,YACC,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,gBAAD,EACE,MAAM,cAAc,QAAQ,mBAAmB,eAChD,CAAA,GACD,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aACb,cAAc,QAAQ,kBAAkB;EACrC,CAAA,CACN,EAAA,CAAA;CAE2B,CAAA;AAErC"}
1
+ {"version":3,"file":"message-scroller.cjs","names":["React","LazyMotion","domAnimation","MessageScrollerPrimitive","useReducedMotion","MESSAGE_ANIMATIONS","Button","ArrowDownward","ArrowUpward"],"sources":["../../src/components/message-scroller.tsx"],"sourcesContent":["import { ArrowDownward, ArrowUpward } from '@epilot/spark-icons'\nimport {\n MessageScroller as MessageScrollerPrimitive,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n} from '@shadcn/react/message-scroller'\nimport { LazyMotion, domAnimation } from 'motion/react'\nimport { create } from 'motion/react-m'\nimport * as React from 'react'\nimport { useReducedMotion } from '../hooks/use-reduced-motion'\nimport { MESSAGE_ANIMATIONS } from '../lib/message-animations'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\n\nconst MessageScrollerAnimationReadyContext = React.createContext(false)\nconst MotionDiv = create('div')\n\ntype MessageScrollerItemProps = Omit<\n React.ComponentProps<typeof MessageScrollerPrimitive.Item>,\n | 'animate'\n | 'exit'\n | 'initial'\n | 'variants'\n | 'onAnimationStart'\n | 'onDrag'\n | 'onDragStart'\n | 'onDragEnd'\n | 'onDragTransitionEnd'\n>\n\nfunction MessageScrollerProvider(\n props: React.ComponentProps<typeof MessageScrollerPrimitive.Provider>,\n) {\n const [ready, setReady] = React.useState(false)\n\n React.useEffect(() => {\n setReady(true)\n }, [])\n\n return (\n <LazyMotion features={domAnimation} strict>\n <MessageScrollerAnimationReadyContext.Provider value={ready}>\n <MessageScrollerPrimitive.Provider {...props} />\n </MessageScrollerAnimationReadyContext.Provider>\n </LazyMotion>\n )\n}\n\nfunction MessageScroller({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Root>) {\n return (\n <MessageScrollerPrimitive.Root\n data-slot=\"message-scroller\"\n className={cn(\n 'group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerViewport({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Viewport>) {\n return (\n <MessageScrollerPrimitive.Viewport\n data-slot=\"message-scroller-viewport\"\n // scroll-fade-b is a spark-adopted shadcn utility; scrollbar-width/gutter\n // are arbitrary props (spark ships no scrollbar-* utilities) and the native\n // bar collapses to no-scrollbar (spark util) while autoscrolling.\n className={cn(\n 'size-full min-h-0 min-w-0 scroll-fade-b overflow-y-auto overscroll-contain contain-content [scrollbar-gutter:stable] [scrollbar-width:thin] focus-visible:ring-2 focus-visible:ring-spark-11 focus-visible:ring-offset-2 focus-visible:outline-hidden data-autoscrolling:no-scrollbar',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerContent({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Content>) {\n return (\n <MessageScrollerPrimitive.Content\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-8', className)}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerItem({\n className,\n scrollAnchor = false,\n children,\n ...props\n}: MessageScrollerItemProps) {\n const ready = React.useContext(MessageScrollerAnimationReadyContext)\n const shouldReduceMotion = useReducedMotion()\n const skipEntrance = !ready || shouldReduceMotion\n\n return (\n <MessageScrollerPrimitive.Item\n {...props}\n data-slot=\"message-scroller-item\"\n scrollAnchor={scrollAnchor}\n className={cn(\n 'min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]',\n className,\n )}\n >\n <MotionDiv\n className=\"w-full min-w-0\"\n variants={MESSAGE_ANIMATIONS['slide-up'].variants}\n initial={skipEntrance ? false : 'initial'}\n animate=\"animate\"\n exit={skipEntrance ? undefined : 'exit'}\n >\n {children}\n </MotionDiv>\n </MessageScrollerPrimitive.Item>\n )\n}\n\n// Renders a spark <Button> via `render`, so its `styleVariant`/`color`/`size`\n// recipe paints the chrome — we only add positioning + the enter/leave animation\n// keyed off the primitive's data-[active] state. Icon is a Spark icon, pointing\n// down for `end` and up for `start`.\nfunction MessageScrollerButton({\n direction = 'end',\n className,\n children,\n render,\n styleVariant = 'surface',\n color = 'neutral',\n size = 'icon-small',\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Button> &\n Pick<ButtonProps, 'styleVariant' | 'color' | 'size'>) {\n return (\n <MessageScrollerPrimitive.Button\n data-slot=\"message-scroller-button\"\n data-direction={direction}\n direction={direction}\n className={cn(\n 'absolute inset-s-1/2 -translate-x-1/2 rounded-full transition-[translate,scale,opacity] duration-200 data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full motion-reduce:transition-none rtl:translate-x-1/2',\n className,\n )}\n render={\n render ?? (\n <Button styleVariant={styleVariant} color={color} size={size} />\n )\n }\n {...props}\n >\n {children ?? (\n <>\n {direction === 'end' ? <ArrowDownward /> : <ArrowUpward />}\n <span className=\"sr-only\">\n {direction === 'end' ? 'Scroll to end' : 'Scroll to start'}\n </span>\n </>\n )}\n </MessageScrollerPrimitive.Button>\n )\n}\n\nexport {\n MessageScroller,\n MessageScrollerButton,\n MessageScrollerContent,\n MessageScrollerItem,\n MessageScrollerProvider,\n MessageScrollerViewport,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAM,uCAAuCA,MAAM,cAAc,KAAK;AACtE,MAAM,aAAA,GAAA,eAAA,QAAmB,KAAK;AAe9B,SAAS,wBACP,OACA;CACA,MAAM,CAAC,OAAO,YAAYA,MAAM,SAAS,KAAK;CAE9C,MAAM,gBAAgB;EACpB,SAAS,IAAI;CACf,GAAG,CAAC,CAAC;CAEL,OACE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,YAAD;EAAY,UAAUC,aAAAA;EAAc,QAAA;YAClC,iBAAA,GAAA,kBAAA,KAAC,qCAAqC,UAAtC;GAA+C,OAAO;aACpD,iBAAA,GAAA,kBAAA,KAACC,+BAAAA,gBAAyB,UAA1B,EAAmC,GAAI,MAAQ,CAAA;EACF,CAAA;CACrC,CAAA;AAEhB;AAEA,SAAS,gBAAgB,EACvB,WACA,GAAG,SAC0D;CAC7D,OACE,iBAAA,GAAA,kBAAA,KAACA,+BAAAA,gBAAyB,MAA1B;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IACE,mFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,wBAAwB,EAC/B,WACA,GAAG,SAC8D;CACjE,OACE,iBAAA,GAAA,kBAAA,KAACA,+BAAAA,gBAAyB,UAA1B;EACE,aAAU;EAIV,YAAA,GAAA,OAAA,IACE,yRACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,iBAAA,GAAA,kBAAA,KAACA,+BAAAA,gBAAyB,SAA1B;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IAAc,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,oBAAoB,EAC3B,WACA,eAAe,OACf,UACA,GAAG,SACwB;CAC3B,MAAM,QAAQH,MAAM,WAAW,oCAAoC;CACnE,MAAM,qBAAqBI,iCAAAA,iBAAiB;CAC5C,MAAM,eAAe,CAAC,SAAS;CAE/B,OACE,iBAAA,GAAA,kBAAA,KAACD,+BAAAA,gBAAyB,MAA1B;EACE,GAAI;EACJ,aAAU;EACI;EACd,YAAA,GAAA,OAAA,IACE,kFACA,SACF;YAEA,iBAAA,GAAA,kBAAA,KAAC,WAAD;GACE,WAAU;GACV,UAAUE,+BAAAA,mBAAmB,YAAY;GACzC,SAAS,eAAe,QAAQ;GAChC,SAAQ;GACR,MAAM,eAAe,KAAA,IAAY;GAEhC;EACQ,CAAA;CACkB,CAAA;AAEnC;AAMA,SAAS,sBAAsB,EAC7B,YAAY,OACZ,WACA,UACA,QACA,eAAe,WACf,QAAQ,WACR,OAAO,cACP,GAAG,SAEmD;CACtD,OACE,iBAAA,GAAA,kBAAA,KAACF,+BAAAA,gBAAyB,QAA1B;EACE,aAAU;EACV,kBAAgB;EACL;EACX,YAAA,GAAA,OAAA,IACE,ypBACA,SACF;EACA,QACE,UACE,iBAAA,GAAA,kBAAA,KAACG,0BAAAA,QAAD;GAAsB;GAAqB;GAAa;EAAO,CAAA;EAGnE,GAAI;YAEH,YACC,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,cAAc,QAAQ,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,eAAD,CAAgB,CAAA,IAAI,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,aAAD,CAAc,CAAA,GACzD,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aACb,cAAc,QAAQ,kBAAkB;EACrC,CAAA,CACN,EAAA,CAAA;CAE2B,CAAA;AAErC"}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
- import { MaterialSymbol } from "../icons/material-symbol.js";
4
- import { Button } from "./button.js";
5
3
  import { useReducedMotion } from "../hooks/use-reduced-motion.js";
6
4
  import { MESSAGE_ANIMATIONS } from "../lib/message-animations.js";
5
+ import { Button } from "./button.js";
7
6
  import * as React$1 from "react";
7
+ import { ArrowDownward, ArrowUpward } from "@epilot/spark-icons";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  import { MessageScroller as MessageScroller$1, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from "@shadcn/react/message-scroller";
10
10
  import { LazyMotion, domAnimation } from "motion/react";
@@ -78,7 +78,7 @@ function MessageScrollerButton({ direction = "end", className, children, render,
78
78
  size
79
79
  }),
80
80
  ...props,
81
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MaterialSymbol, { name: direction === "end" ? "arrow_downward" : "arrow_upward" }), /* @__PURE__ */ jsx("span", {
81
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [direction === "end" ? /* @__PURE__ */ jsx(ArrowDownward, {}) : /* @__PURE__ */ jsx(ArrowUpward, {}), /* @__PURE__ */ jsx("span", {
82
82
  className: "sr-only",
83
83
  children: direction === "end" ? "Scroll to end" : "Scroll to start"
84
84
  })] })
@@ -1 +1 @@
1
- {"version":3,"file":"message-scroller.js","names":["React","MessageScrollerPrimitive"],"sources":["../../src/components/message-scroller.tsx"],"sourcesContent":["import {\n MessageScroller as MessageScrollerPrimitive,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n} from '@shadcn/react/message-scroller'\nimport { LazyMotion, domAnimation } from 'motion/react'\nimport { create } from 'motion/react-m'\nimport * as React from 'react'\nimport { useReducedMotion } from '../hooks/use-reduced-motion'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { MESSAGE_ANIMATIONS } from '../lib/message-animations'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\n\nconst MessageScrollerAnimationReadyContext = React.createContext(false)\nconst MotionDiv = create('div')\n\ntype MessageScrollerItemProps = Omit<\n React.ComponentProps<typeof MessageScrollerPrimitive.Item>,\n | 'animate'\n | 'exit'\n | 'initial'\n | 'variants'\n | 'onAnimationStart'\n | 'onDrag'\n | 'onDragStart'\n | 'onDragEnd'\n | 'onDragTransitionEnd'\n>\n\nfunction MessageScrollerProvider(\n props: React.ComponentProps<typeof MessageScrollerPrimitive.Provider>,\n) {\n const [ready, setReady] = React.useState(false)\n\n React.useEffect(() => {\n setReady(true)\n }, [])\n\n return (\n <LazyMotion features={domAnimation} strict>\n <MessageScrollerAnimationReadyContext.Provider value={ready}>\n <MessageScrollerPrimitive.Provider {...props} />\n </MessageScrollerAnimationReadyContext.Provider>\n </LazyMotion>\n )\n}\n\nfunction MessageScroller({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Root>) {\n return (\n <MessageScrollerPrimitive.Root\n data-slot=\"message-scroller\"\n className={cn(\n 'group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerViewport({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Viewport>) {\n return (\n <MessageScrollerPrimitive.Viewport\n data-slot=\"message-scroller-viewport\"\n // scroll-fade-b is a spark-adopted shadcn utility; scrollbar-width/gutter\n // are arbitrary props (spark ships no scrollbar-* utilities) and the native\n // bar collapses to no-scrollbar (spark util) while autoscrolling.\n className={cn(\n 'size-full min-h-0 min-w-0 scroll-fade-b overflow-y-auto overscroll-contain contain-content [scrollbar-gutter:stable] [scrollbar-width:thin] focus-visible:ring-2 focus-visible:ring-spark-11 focus-visible:ring-offset-2 focus-visible:outline-hidden data-autoscrolling:no-scrollbar',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerContent({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Content>) {\n return (\n <MessageScrollerPrimitive.Content\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-8', className)}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerItem({\n className,\n scrollAnchor = false,\n children,\n ...props\n}: MessageScrollerItemProps) {\n const ready = React.useContext(MessageScrollerAnimationReadyContext)\n const shouldReduceMotion = useReducedMotion()\n const skipEntrance = !ready || shouldReduceMotion\n\n return (\n <MessageScrollerPrimitive.Item\n {...props}\n data-slot=\"message-scroller-item\"\n scrollAnchor={scrollAnchor}\n className={cn(\n 'min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]',\n className,\n )}\n >\n <MotionDiv\n className=\"w-full min-w-0\"\n variants={MESSAGE_ANIMATIONS['slide-up'].variants}\n initial={skipEntrance ? false : 'initial'}\n animate=\"animate\"\n exit={skipEntrance ? undefined : 'exit'}\n >\n {children}\n </MotionDiv>\n </MessageScrollerPrimitive.Item>\n )\n}\n\n// Renders a spark <Button> via `render`, so its `styleVariant`/`color`/`size`\n// recipe paints the chrome — we only add positioning + the enter/leave animation\n// keyed off the primitive's data-[active] state. Icon is a MaterialSymbol (spark's\n// icon set), pointing down for `end` and up for `start`.\nfunction MessageScrollerButton({\n direction = 'end',\n className,\n children,\n render,\n styleVariant = 'surface',\n color = 'neutral',\n size = 'icon-small',\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Button> &\n Pick<ButtonProps, 'styleVariant' | 'color' | 'size'>) {\n return (\n <MessageScrollerPrimitive.Button\n data-slot=\"message-scroller-button\"\n data-direction={direction}\n direction={direction}\n className={cn(\n 'absolute inset-s-1/2 -translate-x-1/2 rounded-full transition-[translate,scale,opacity] duration-200 data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full motion-reduce:transition-none rtl:translate-x-1/2',\n className,\n )}\n render={\n render ?? (\n <Button styleVariant={styleVariant} color={color} size={size} />\n )\n }\n {...props}\n >\n {children ?? (\n <>\n <MaterialSymbol\n name={direction === 'end' ? 'arrow_downward' : 'arrow_upward'}\n />\n <span className=\"sr-only\">\n {direction === 'end' ? 'Scroll to end' : 'Scroll to start'}\n </span>\n </>\n )}\n </MessageScrollerPrimitive.Button>\n )\n}\n\nexport {\n MessageScroller,\n MessageScrollerButton,\n MessageScrollerContent,\n MessageScrollerItem,\n MessageScrollerProvider,\n MessageScrollerViewport,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n}\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,uCAAuCA,QAAM,cAAc,KAAK;AACtE,MAAM,YAAY,OAAO,KAAK;AAe9B,SAAS,wBACP,OACA;CACA,MAAM,CAAC,OAAO,YAAYA,QAAM,SAAS,KAAK;CAE9C,QAAM,gBAAgB;EACpB,SAAS,IAAI;CACf,GAAG,CAAC,CAAC;CAEL,OACE,oBAAC,YAAD;EAAY,UAAU;EAAc,QAAA;YAClC,oBAAC,qCAAqC,UAAtC;GAA+C,OAAO;aACpD,oBAACC,kBAAyB,UAA1B,EAAmC,GAAI,MAAQ,CAAA;EACF,CAAA;CACrC,CAAA;AAEhB;AAEA,SAAS,gBAAgB,EACvB,WACA,GAAG,SAC0D;CAC7D,OACE,oBAACA,kBAAyB,MAA1B;EACE,aAAU;EACV,WAAW,GACT,mFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,wBAAwB,EAC/B,WACA,GAAG,SAC8D;CACjE,OACE,oBAACA,kBAAyB,UAA1B;EACE,aAAU;EAIV,WAAW,GACT,yRACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,oBAACA,kBAAyB,SAA1B;EACE,aAAU;EACV,WAAW,GAAG,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,oBAAoB,EAC3B,WACA,eAAe,OACf,UACA,GAAG,SACwB;CAC3B,MAAM,QAAQD,QAAM,WAAW,oCAAoC;CACnE,MAAM,qBAAqB,iBAAiB;CAC5C,MAAM,eAAe,CAAC,SAAS;CAE/B,OACE,oBAACC,kBAAyB,MAA1B;EACE,GAAI;EACJ,aAAU;EACI;EACd,WAAW,GACT,kFACA,SACF;YAEA,oBAAC,WAAD;GACE,WAAU;GACV,UAAU,mBAAmB,YAAY;GACzC,SAAS,eAAe,QAAQ;GAChC,SAAQ;GACR,MAAM,eAAe,KAAA,IAAY;GAEhC;EACQ,CAAA;CACkB,CAAA;AAEnC;AAMA,SAAS,sBAAsB,EAC7B,YAAY,OACZ,WACA,UACA,QACA,eAAe,WACf,QAAQ,WACR,OAAO,cACP,GAAG,SAEmD;CACtD,OACE,oBAACA,kBAAyB,QAA1B;EACE,aAAU;EACV,kBAAgB;EACL;EACX,WAAW,GACT,ypBACA,SACF;EACA,QACE,UACE,oBAAC,QAAD;GAAsB;GAAqB;GAAa;EAAO,CAAA;EAGnE,GAAI;YAEH,YACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,gBAAD,EACE,MAAM,cAAc,QAAQ,mBAAmB,eAChD,CAAA,GACD,oBAAC,QAAD;GAAM,WAAU;aACb,cAAc,QAAQ,kBAAkB;EACrC,CAAA,CACN,EAAA,CAAA;CAE2B,CAAA;AAErC"}
1
+ {"version":3,"file":"message-scroller.js","names":["React","MessageScrollerPrimitive"],"sources":["../../src/components/message-scroller.tsx"],"sourcesContent":["import { ArrowDownward, ArrowUpward } from '@epilot/spark-icons'\nimport {\n MessageScroller as MessageScrollerPrimitive,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n} from '@shadcn/react/message-scroller'\nimport { LazyMotion, domAnimation } from 'motion/react'\nimport { create } from 'motion/react-m'\nimport * as React from 'react'\nimport { useReducedMotion } from '../hooks/use-reduced-motion'\nimport { MESSAGE_ANIMATIONS } from '../lib/message-animations'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\n\nconst MessageScrollerAnimationReadyContext = React.createContext(false)\nconst MotionDiv = create('div')\n\ntype MessageScrollerItemProps = Omit<\n React.ComponentProps<typeof MessageScrollerPrimitive.Item>,\n | 'animate'\n | 'exit'\n | 'initial'\n | 'variants'\n | 'onAnimationStart'\n | 'onDrag'\n | 'onDragStart'\n | 'onDragEnd'\n | 'onDragTransitionEnd'\n>\n\nfunction MessageScrollerProvider(\n props: React.ComponentProps<typeof MessageScrollerPrimitive.Provider>,\n) {\n const [ready, setReady] = React.useState(false)\n\n React.useEffect(() => {\n setReady(true)\n }, [])\n\n return (\n <LazyMotion features={domAnimation} strict>\n <MessageScrollerAnimationReadyContext.Provider value={ready}>\n <MessageScrollerPrimitive.Provider {...props} />\n </MessageScrollerAnimationReadyContext.Provider>\n </LazyMotion>\n )\n}\n\nfunction MessageScroller({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Root>) {\n return (\n <MessageScrollerPrimitive.Root\n data-slot=\"message-scroller\"\n className={cn(\n 'group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerViewport({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Viewport>) {\n return (\n <MessageScrollerPrimitive.Viewport\n data-slot=\"message-scroller-viewport\"\n // scroll-fade-b is a spark-adopted shadcn utility; scrollbar-width/gutter\n // are arbitrary props (spark ships no scrollbar-* utilities) and the native\n // bar collapses to no-scrollbar (spark util) while autoscrolling.\n className={cn(\n 'size-full min-h-0 min-w-0 scroll-fade-b overflow-y-auto overscroll-contain contain-content [scrollbar-gutter:stable] [scrollbar-width:thin] focus-visible:ring-2 focus-visible:ring-spark-11 focus-visible:ring-offset-2 focus-visible:outline-hidden data-autoscrolling:no-scrollbar',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerContent({\n className,\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Content>) {\n return (\n <MessageScrollerPrimitive.Content\n data-slot=\"message-scroller-content\"\n className={cn('flex h-max min-h-full flex-col gap-8', className)}\n {...props}\n />\n )\n}\n\nfunction MessageScrollerItem({\n className,\n scrollAnchor = false,\n children,\n ...props\n}: MessageScrollerItemProps) {\n const ready = React.useContext(MessageScrollerAnimationReadyContext)\n const shouldReduceMotion = useReducedMotion()\n const skipEntrance = !ready || shouldReduceMotion\n\n return (\n <MessageScrollerPrimitive.Item\n {...props}\n data-slot=\"message-scroller-item\"\n scrollAnchor={scrollAnchor}\n className={cn(\n 'min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]',\n className,\n )}\n >\n <MotionDiv\n className=\"w-full min-w-0\"\n variants={MESSAGE_ANIMATIONS['slide-up'].variants}\n initial={skipEntrance ? false : 'initial'}\n animate=\"animate\"\n exit={skipEntrance ? undefined : 'exit'}\n >\n {children}\n </MotionDiv>\n </MessageScrollerPrimitive.Item>\n )\n}\n\n// Renders a spark <Button> via `render`, so its `styleVariant`/`color`/`size`\n// recipe paints the chrome — we only add positioning + the enter/leave animation\n// keyed off the primitive's data-[active] state. Icon is a Spark icon, pointing\n// down for `end` and up for `start`.\nfunction MessageScrollerButton({\n direction = 'end',\n className,\n children,\n render,\n styleVariant = 'surface',\n color = 'neutral',\n size = 'icon-small',\n ...props\n}: React.ComponentProps<typeof MessageScrollerPrimitive.Button> &\n Pick<ButtonProps, 'styleVariant' | 'color' | 'size'>) {\n return (\n <MessageScrollerPrimitive.Button\n data-slot=\"message-scroller-button\"\n data-direction={direction}\n direction={direction}\n className={cn(\n 'absolute inset-s-1/2 -translate-x-1/2 rounded-full transition-[translate,scale,opacity] duration-200 data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full motion-reduce:transition-none rtl:translate-x-1/2',\n className,\n )}\n render={\n render ?? (\n <Button styleVariant={styleVariant} color={color} size={size} />\n )\n }\n {...props}\n >\n {children ?? (\n <>\n {direction === 'end' ? <ArrowDownward /> : <ArrowUpward />}\n <span className=\"sr-only\">\n {direction === 'end' ? 'Scroll to end' : 'Scroll to start'}\n </span>\n </>\n )}\n </MessageScrollerPrimitive.Button>\n )\n}\n\nexport {\n MessageScroller,\n MessageScrollerButton,\n MessageScrollerContent,\n MessageScrollerItem,\n MessageScrollerProvider,\n MessageScrollerViewport,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n}\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,uCAAuCA,QAAM,cAAc,KAAK;AACtE,MAAM,YAAY,OAAO,KAAK;AAe9B,SAAS,wBACP,OACA;CACA,MAAM,CAAC,OAAO,YAAYA,QAAM,SAAS,KAAK;CAE9C,QAAM,gBAAgB;EACpB,SAAS,IAAI;CACf,GAAG,CAAC,CAAC;CAEL,OACE,oBAAC,YAAD;EAAY,UAAU;EAAc,QAAA;YAClC,oBAAC,qCAAqC,UAAtC;GAA+C,OAAO;aACpD,oBAACC,kBAAyB,UAA1B,EAAmC,GAAI,MAAQ,CAAA;EACF,CAAA;CACrC,CAAA;AAEhB;AAEA,SAAS,gBAAgB,EACvB,WACA,GAAG,SAC0D;CAC7D,OACE,oBAACA,kBAAyB,MAA1B;EACE,aAAU;EACV,WAAW,GACT,mFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,wBAAwB,EAC/B,WACA,GAAG,SAC8D;CACjE,OACE,oBAACA,kBAAyB,UAA1B;EACE,aAAU;EAIV,WAAW,GACT,yRACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,oBAACA,kBAAyB,SAA1B;EACE,aAAU;EACV,WAAW,GAAG,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,oBAAoB,EAC3B,WACA,eAAe,OACf,UACA,GAAG,SACwB;CAC3B,MAAM,QAAQD,QAAM,WAAW,oCAAoC;CACnE,MAAM,qBAAqB,iBAAiB;CAC5C,MAAM,eAAe,CAAC,SAAS;CAE/B,OACE,oBAACC,kBAAyB,MAA1B;EACE,GAAI;EACJ,aAAU;EACI;EACd,WAAW,GACT,kFACA,SACF;YAEA,oBAAC,WAAD;GACE,WAAU;GACV,UAAU,mBAAmB,YAAY;GACzC,SAAS,eAAe,QAAQ;GAChC,SAAQ;GACR,MAAM,eAAe,KAAA,IAAY;GAEhC;EACQ,CAAA;CACkB,CAAA;AAEnC;AAMA,SAAS,sBAAsB,EAC7B,YAAY,OACZ,WACA,UACA,QACA,eAAe,WACf,QAAQ,WACR,OAAO,cACP,GAAG,SAEmD;CACtD,OACE,oBAACA,kBAAyB,QAA1B;EACE,aAAU;EACV,kBAAgB;EACL;EACX,WAAW,GACT,ypBACA,SACF;EACA,QACE,UACE,oBAAC,QAAD;GAAsB;GAAqB;GAAa;EAAO,CAAA;EAGnE,GAAI;YAEH,YACC,qBAAA,UAAA,EAAA,UAAA,CACG,cAAc,QAAQ,oBAAC,eAAD,CAAgB,CAAA,IAAI,oBAAC,aAAD,CAAc,CAAA,GACzD,oBAAC,QAAD;GAAM,WAAU;aACb,cAAc,QAAQ,kBAAkB;EACrC,CAAA,CACN,EAAA,CAAA;CAE2B,CAAA;AAErC"}
@@ -28,14 +28,14 @@ const toneToIconColor = {
28
28
  warning: "warning",
29
29
  error: "danger"
30
30
  };
31
- const MeteringRowIcon = ({ className, icon, ...rest }) => {
31
+ const MeteringRowIcon = ({ className, icon: Glyph, ...rest }) => {
32
32
  const tone = useMeteringRowTone();
33
33
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_icon.Icon, {
34
34
  ...rest,
35
35
  className,
36
36
  color: toneToIconColor[tone],
37
- name: icon,
38
- size: "large"
37
+ size: "large",
38
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Glyph, {})
39
39
  });
40
40
  };
41
41
  const MeteringRowLabel = ({ className, ...rest }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"metering-row.cjs","names":["Icon"],"sources":["../../src/components/metering-row.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { MaterialSymbolIconName } from '../icons/material-symbol'\nimport type { SparkAccentColor } from '../lib/accent-colors'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\nimport { Icon } from './icon'\n\nconst MeteringRowContext = createContext<Tone | null>(null)\n\nfunction useMeteringRowTone() {\n const tone = useContext(MeteringRowContext)\n if (!tone) {\n throw new Error('MeteringRow.* must be rendered inside <MeteringRow>')\n }\n return tone\n}\n\nconst MeteringRow = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'div'> & {\n tone: Tone\n}) => {\n return (\n <MeteringRowContext.Provider value={tone}>\n <div\n className={cn('group flex items-center gap-3', className)}\n data-tone={tone}\n {...rest}\n />\n </MeteringRowContext.Provider>\n )\n}\n\nconst toneToIconColor: Record<Tone, SparkAccentColor> = {\n accent: 'accent',\n neutral: 'neutral',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n}\n\nconst MeteringRowIcon = ({\n className,\n icon,\n ...rest\n}: React.ComponentProps<'span'> & {\n icon: MaterialSymbolIconName\n}) => {\n const tone = useMeteringRowTone()\n return (\n <Icon\n {...rest}\n className={className}\n color={toneToIconColor[tone]}\n name={icon}\n size=\"large\"\n />\n )\n}\n\nconst MeteringRowLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span className={cn('flex-1 text-sm text-gray', className)} {...rest} />\n )\n}\n\nconst MeteringRowValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\n 'text-lg leading-tight font-bold tabular-nums group-data-[tone=accent]:text-accent group-data-[tone=error]:text-error group-data-[tone=neutral]:text-gray group-data-[tone=success]:text-success group-data-[tone=warning]:text-warning',\n className,\n )}\n {...rest}\n />\n )\n}\n\nexport { MeteringRow, MeteringRowIcon, MeteringRowLabel, MeteringRowValue }\n"],"mappings":";;;;;;;AAOA,MAAM,sBAAA,GAAA,MAAA,eAAgD,IAAI;AAE1D,SAAS,qBAAqB;CAC5B,MAAM,QAAA,GAAA,MAAA,YAAkB,kBAAkB;CAC1C,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,qDAAqD;CAEvE,OAAO;AACT;AAEA,MAAM,eAAe,EACnB,WACA,MACA,GAAG,WAGC;CACJ,OACE,iBAAA,GAAA,kBAAA,KAAC,mBAAmB,UAApB;EAA6B,OAAO;YAClC,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,YAAA,GAAA,OAAA,IAAc,iCAAiC,SAAS;GACxD,aAAW;GACX,GAAI;EACL,CAAA;CAC0B,CAAA;AAEjC;AAEA,MAAM,kBAAkD;CACtD,QAAQ;CACR,SAAS;CACT,SAAS;CACT,SAAS;CACT,OAAO;AACT;AAEA,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,WAGC;CACJ,MAAM,OAAO,mBAAmB;CAChC,OACE,iBAAA,GAAA,kBAAA,KAACA,wBAAAA,MAAD;EACE,GAAI;EACO;EACX,OAAO,gBAAgB;EACvB,MAAM;EACN,MAAK;CACN,CAAA;AAEL;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,YAAA,GAAA,OAAA,IAAc,4BAA4B,SAAS;EAAG,GAAI;CAAO,CAAA;AAE3E;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IACE,0OACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"metering-row.cjs","names":["Icon"],"sources":["../../src/components/metering-row.tsx"],"sourcesContent":["import type { SparkIcon } from '@epilot/spark-icons'\nimport { createContext, useContext } from 'react'\nimport type { SparkAccentColor } from '../lib/accent-colors'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\nimport { Icon } from './icon'\n\nconst MeteringRowContext = createContext<Tone | null>(null)\n\nfunction useMeteringRowTone() {\n const tone = useContext(MeteringRowContext)\n if (!tone) {\n throw new Error('MeteringRow.* must be rendered inside <MeteringRow>')\n }\n return tone\n}\n\nconst MeteringRow = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'div'> & {\n tone: Tone\n}) => {\n return (\n <MeteringRowContext.Provider value={tone}>\n <div\n className={cn('group flex items-center gap-3', className)}\n data-tone={tone}\n {...rest}\n />\n </MeteringRowContext.Provider>\n )\n}\n\nconst toneToIconColor: Record<Tone, SparkAccentColor> = {\n accent: 'accent',\n neutral: 'neutral',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n}\n\nconst MeteringRowIcon = ({\n className,\n icon: Glyph,\n ...rest\n}: React.ComponentProps<'span'> & {\n icon: SparkIcon\n}) => {\n const tone = useMeteringRowTone()\n return (\n <Icon\n {...rest}\n className={className}\n color={toneToIconColor[tone]}\n size=\"large\"\n >\n <Glyph />\n </Icon>\n )\n}\n\nconst MeteringRowLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span className={cn('flex-1 text-sm text-gray', className)} {...rest} />\n )\n}\n\nconst MeteringRowValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\n 'text-lg leading-tight font-bold tabular-nums group-data-[tone=accent]:text-accent group-data-[tone=error]:text-error group-data-[tone=neutral]:text-gray group-data-[tone=success]:text-success group-data-[tone=warning]:text-warning',\n className,\n )}\n {...rest}\n />\n )\n}\n\nexport { MeteringRow, MeteringRowIcon, MeteringRowLabel, MeteringRowValue }\n"],"mappings":";;;;;;;AAOA,MAAM,sBAAA,GAAA,MAAA,eAAgD,IAAI;AAE1D,SAAS,qBAAqB;CAC5B,MAAM,QAAA,GAAA,MAAA,YAAkB,kBAAkB;CAC1C,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,qDAAqD;CAEvE,OAAO;AACT;AAEA,MAAM,eAAe,EACnB,WACA,MACA,GAAG,WAGC;CACJ,OACE,iBAAA,GAAA,kBAAA,KAAC,mBAAmB,UAApB;EAA6B,OAAO;YAClC,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,YAAA,GAAA,OAAA,IAAc,iCAAiC,SAAS;GACxD,aAAW;GACX,GAAI;EACL,CAAA;CAC0B,CAAA;AAEjC;AAEA,MAAM,kBAAkD;CACtD,QAAQ;CACR,SAAS;CACT,SAAS;CACT,SAAS;CACT,OAAO;AACT;AAEA,MAAM,mBAAmB,EACvB,WACA,MAAM,OACN,GAAG,WAGC;CACJ,MAAM,OAAO,mBAAmB;CAChC,OACE,iBAAA,GAAA,kBAAA,KAACA,wBAAAA,MAAD;EACE,GAAI;EACO;EACX,OAAO,gBAAgB;EACvB,MAAK;YAEL,iBAAA,GAAA,kBAAA,KAAC,OAAD,CAAQ,CAAA;CACJ,CAAA;AAEV;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,YAAA,GAAA,OAAA,IAAc,4BAA4B,SAAS;EAAG,GAAI;CAAO,CAAA;AAE3E;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IACE,0OACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
- import { MaterialSymbolIconName } from "../icons/material-symbol.cjs";
4
3
  import { Tone } from "../lib/tones.cjs";
4
+ import { SparkIcon } from "@epilot/spark-icons";
5
5
 
6
6
  //#region src/components/metering-row.d.ts
7
7
  declare const MeteringRow: ({
@@ -13,10 +13,10 @@ declare const MeteringRow: ({
13
13
  }) => import("react/jsx-runtime").JSX.Element;
14
14
  declare const MeteringRowIcon: ({
15
15
  className,
16
- icon,
16
+ icon: Glyph,
17
17
  ...rest
18
18
  }: React.ComponentProps<"span"> & {
19
- icon: MaterialSymbolIconName;
19
+ icon: SparkIcon;
20
20
  }) => import("react/jsx-runtime").JSX.Element;
21
21
  declare const MeteringRowLabel: ({
22
22
  className,
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
- import { MaterialSymbolIconName } from "../icons/material-symbol.js";
4
3
  import { Tone } from "../lib/tones.js";
4
+ import { SparkIcon } from "@epilot/spark-icons";
5
5
 
6
6
  //#region src/components/metering-row.d.ts
7
7
  declare const MeteringRow: ({
@@ -13,10 +13,10 @@ declare const MeteringRow: ({
13
13
  }) => import("react/jsx-runtime").JSX.Element;
14
14
  declare const MeteringRowIcon: ({
15
15
  className,
16
- icon,
16
+ icon: Glyph,
17
17
  ...rest
18
18
  }: React.ComponentProps<"span"> & {
19
- icon: MaterialSymbolIconName;
19
+ icon: SparkIcon;
20
20
  }) => import("react/jsx-runtime").JSX.Element;
21
21
  declare const MeteringRowLabel: ({
22
22
  className,
@@ -27,14 +27,14 @@ const toneToIconColor = {
27
27
  warning: "warning",
28
28
  error: "danger"
29
29
  };
30
- const MeteringRowIcon = ({ className, icon, ...rest }) => {
30
+ const MeteringRowIcon = ({ className, icon: Glyph, ...rest }) => {
31
31
  const tone = useMeteringRowTone();
32
32
  return /* @__PURE__ */ jsx(Icon, {
33
33
  ...rest,
34
34
  className,
35
35
  color: toneToIconColor[tone],
36
- name: icon,
37
- size: "large"
36
+ size: "large",
37
+ children: /* @__PURE__ */ jsx(Glyph, {})
38
38
  });
39
39
  };
40
40
  const MeteringRowLabel = ({ className, ...rest }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"metering-row.js","names":[],"sources":["../../src/components/metering-row.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { MaterialSymbolIconName } from '../icons/material-symbol'\nimport type { SparkAccentColor } from '../lib/accent-colors'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\nimport { Icon } from './icon'\n\nconst MeteringRowContext = createContext<Tone | null>(null)\n\nfunction useMeteringRowTone() {\n const tone = useContext(MeteringRowContext)\n if (!tone) {\n throw new Error('MeteringRow.* must be rendered inside <MeteringRow>')\n }\n return tone\n}\n\nconst MeteringRow = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'div'> & {\n tone: Tone\n}) => {\n return (\n <MeteringRowContext.Provider value={tone}>\n <div\n className={cn('group flex items-center gap-3', className)}\n data-tone={tone}\n {...rest}\n />\n </MeteringRowContext.Provider>\n )\n}\n\nconst toneToIconColor: Record<Tone, SparkAccentColor> = {\n accent: 'accent',\n neutral: 'neutral',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n}\n\nconst MeteringRowIcon = ({\n className,\n icon,\n ...rest\n}: React.ComponentProps<'span'> & {\n icon: MaterialSymbolIconName\n}) => {\n const tone = useMeteringRowTone()\n return (\n <Icon\n {...rest}\n className={className}\n color={toneToIconColor[tone]}\n name={icon}\n size=\"large\"\n />\n )\n}\n\nconst MeteringRowLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span className={cn('flex-1 text-sm text-gray', className)} {...rest} />\n )\n}\n\nconst MeteringRowValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\n 'text-lg leading-tight font-bold tabular-nums group-data-[tone=accent]:text-accent group-data-[tone=error]:text-error group-data-[tone=neutral]:text-gray group-data-[tone=success]:text-success group-data-[tone=warning]:text-warning',\n className,\n )}\n {...rest}\n />\n )\n}\n\nexport { MeteringRow, MeteringRowIcon, MeteringRowLabel, MeteringRowValue }\n"],"mappings":";;;;;;AAOA,MAAM,qBAAqB,cAA2B,IAAI;AAE1D,SAAS,qBAAqB;CAC5B,MAAM,OAAO,WAAW,kBAAkB;CAC1C,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,qDAAqD;CAEvE,OAAO;AACT;AAEA,MAAM,eAAe,EACnB,WACA,MACA,GAAG,WAGC;CACJ,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;YAClC,oBAAC,OAAD;GACE,WAAW,GAAG,iCAAiC,SAAS;GACxD,aAAW;GACX,GAAI;EACL,CAAA;CAC0B,CAAA;AAEjC;AAEA,MAAM,kBAAkD;CACtD,QAAQ;CACR,SAAS;CACT,SAAS;CACT,SAAS;CACT,OAAO;AACT;AAEA,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,WAGC;CACJ,MAAM,OAAO,mBAAmB;CAChC,OACE,oBAAC,MAAD;EACE,GAAI;EACO;EACX,OAAO,gBAAgB;EACvB,MAAM;EACN,MAAK;CACN,CAAA;AAEL;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,oBAAC,QAAD;EAAM,WAAW,GAAG,4BAA4B,SAAS;EAAG,GAAI;CAAO,CAAA;AAE3E;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,oBAAC,QAAD;EACE,WAAW,GACT,0OACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"metering-row.js","names":[],"sources":["../../src/components/metering-row.tsx"],"sourcesContent":["import type { SparkIcon } from '@epilot/spark-icons'\nimport { createContext, useContext } from 'react'\nimport type { SparkAccentColor } from '../lib/accent-colors'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\nimport { Icon } from './icon'\n\nconst MeteringRowContext = createContext<Tone | null>(null)\n\nfunction useMeteringRowTone() {\n const tone = useContext(MeteringRowContext)\n if (!tone) {\n throw new Error('MeteringRow.* must be rendered inside <MeteringRow>')\n }\n return tone\n}\n\nconst MeteringRow = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'div'> & {\n tone: Tone\n}) => {\n return (\n <MeteringRowContext.Provider value={tone}>\n <div\n className={cn('group flex items-center gap-3', className)}\n data-tone={tone}\n {...rest}\n />\n </MeteringRowContext.Provider>\n )\n}\n\nconst toneToIconColor: Record<Tone, SparkAccentColor> = {\n accent: 'accent',\n neutral: 'neutral',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n}\n\nconst MeteringRowIcon = ({\n className,\n icon: Glyph,\n ...rest\n}: React.ComponentProps<'span'> & {\n icon: SparkIcon\n}) => {\n const tone = useMeteringRowTone()\n return (\n <Icon\n {...rest}\n className={className}\n color={toneToIconColor[tone]}\n size=\"large\"\n >\n <Glyph />\n </Icon>\n )\n}\n\nconst MeteringRowLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span className={cn('flex-1 text-sm text-gray', className)} {...rest} />\n )\n}\n\nconst MeteringRowValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\n 'text-lg leading-tight font-bold tabular-nums group-data-[tone=accent]:text-accent group-data-[tone=error]:text-error group-data-[tone=neutral]:text-gray group-data-[tone=success]:text-success group-data-[tone=warning]:text-warning',\n className,\n )}\n {...rest}\n />\n )\n}\n\nexport { MeteringRow, MeteringRowIcon, MeteringRowLabel, MeteringRowValue }\n"],"mappings":";;;;;;AAOA,MAAM,qBAAqB,cAA2B,IAAI;AAE1D,SAAS,qBAAqB;CAC5B,MAAM,OAAO,WAAW,kBAAkB;CAC1C,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,qDAAqD;CAEvE,OAAO;AACT;AAEA,MAAM,eAAe,EACnB,WACA,MACA,GAAG,WAGC;CACJ,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;YAClC,oBAAC,OAAD;GACE,WAAW,GAAG,iCAAiC,SAAS;GACxD,aAAW;GACX,GAAI;EACL,CAAA;CAC0B,CAAA;AAEjC;AAEA,MAAM,kBAAkD;CACtD,QAAQ;CACR,SAAS;CACT,SAAS;CACT,SAAS;CACT,OAAO;AACT;AAEA,MAAM,mBAAmB,EACvB,WACA,MAAM,OACN,GAAG,WAGC;CACJ,MAAM,OAAO,mBAAmB;CAChC,OACE,oBAAC,MAAD;EACE,GAAI;EACO;EACX,OAAO,gBAAgB;EACvB,MAAK;YAEL,oBAAC,OAAD,CAAQ,CAAA;CACJ,CAAA;AAEV;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,oBAAC,QAAD;EAAM,WAAW,GAAG,4BAA4B,SAAS;EAAG,GAAI;CAAO,CAAA;AAE3E;AAEA,MAAM,oBAAoB,EACxB,WACA,GAAG,WAC+B;CAClC,OACE,oBAAC,QAAD;EACE,WAAW,GACT,0OACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
4
3
  const require_components_typography = require("./typography.cjs");
4
+ let _epilot_spark_icons = require("@epilot/spark-icons");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
6
  //#region src/components/money-saved-block.tsx
7
7
  const MoneySavedContainer = ({ children, ariaLabel = "Money saved today" }) => {
@@ -26,10 +26,7 @@ const MoneySavedValue = ({ children }) => {
26
26
  const MoneySavedDelta = ({ children }) => {
27
27
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
28
28
  className: "flex items-end gap-1 text-sm text-base-success-solid",
29
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
30
- className: "rotate-180 text-[14px]",
31
- name: "swap_vert"
32
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
29
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.SwapVert, { className: "rotate-180 [--spark-icon-size:14px]" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
33
30
  className: "tabular-nums",
34
31
  children
35
32
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"money-saved-block.cjs","names":["SectionTitle","StateValue","MaterialSymbol"],"sources":["../../src/components/money-saved-block.tsx"],"sourcesContent":["import { MaterialSymbol } from '../icons/material-symbol'\nimport { SectionTitle, StateValue } from './typography'\n\nconst MoneySavedContainer = ({\n children,\n ariaLabel = 'Money saved today',\n}: {\n children: React.ReactNode\n /** Override the accessible label for the container. Defaults to `\"Money saved today\"`. */\n ariaLabel?: string\n}) => {\n return (\n <div\n aria-label={ariaLabel}\n className=\"flex items-center justify-between gap-4\"\n >\n {children}\n </div>\n )\n}\n\nconst MoneySavedContent = ({ children }: { children: React.ReactNode }) => {\n return <div className=\"flex flex-col gap-1\">{children}</div>\n}\n\nconst MoneySavedTitle = ({ children }: { children: React.ReactNode }) => {\n return <SectionTitle>{children}</SectionTitle>\n}\n\nconst MoneySavedValue = ({ children }: { children: React.ReactNode }) => {\n return <StateValue>{children}</StateValue>\n}\n\nconst MoneySavedDelta = ({ children }: { children: React.ReactNode }) => {\n return (\n <span className=\"flex items-end gap-1 text-sm text-base-success-solid\">\n <MaterialSymbol className=\"rotate-180 text-[14px]\" name=\"swap_vert\" />\n <span className=\"tabular-nums\">{children}</span>\n </span>\n )\n}\n\nconst MoneySavedGaugeContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n return (\n <div className=\"relative top-2 flex flex-col items-end gap-1\">\n {children}\n </div>\n )\n}\n\nconst MoneySavedGaugeContent = ({\n autarkyProgress,\n autarkyLabel,\n autarkyCaption = 'Autarky',\n gaugeWidth,\n gaugeHeight,\n gaugeArcPath,\n gaugeStrokeWidth,\n}: {\n autarkyProgress: number\n autarkyLabel: string\n /** Override the caption shown beneath the gauge. Defaults to `\"Autarky\"`. */\n autarkyCaption?: React.ReactNode\n gaugeWidth: number\n gaugeHeight: number\n gaugeArcPath: string\n gaugeStrokeWidth: number\n}) => {\n return (\n <>\n <svg\n className=\"h-[44px] w-[76px]\"\n viewBox={`0 0 ${gaugeWidth} ${gaugeHeight}`}\n aria-hidden=\"true\"\n >\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--neutral-a5)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n />\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--green-a9)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n strokeDasharray={`${autarkyProgress} 1`}\n />\n </svg>\n <span className=\"absolute inset-0 flex items-center justify-center text-sm font-semibold text-gray\">\n {autarkyLabel}\n </span>\n <span className=\"mx-auto text-xs text-gray-light\">{autarkyCaption}</span>\n </>\n )\n}\n\nexport {\n MoneySavedContainer,\n MoneySavedContent,\n MoneySavedTitle,\n MoneySavedValue,\n MoneySavedDelta,\n MoneySavedGaugeContainer,\n MoneySavedGaugeContent,\n}\n"],"mappings":";;;;;;AAGA,MAAM,uBAAuB,EAC3B,UACA,YAAY,0BAKR;CACJ,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,cAAY;EACZ,WAAU;EAET;CACE,CAAA;AAET;AAEA,MAAM,qBAAqB,EAAE,eAA8C;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;EAAuB;CAAc,CAAA;AAC7D;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAACA,8BAAAA,cAAD,EAAe,SAAuB,CAAA;AAC/C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,YAAD,EAAa,SAAqB,CAAA;AAC3C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OACE,iBAAA,GAAA,kBAAA,MAAC,QAAD;EAAM,WAAU;YAAhB,CACE,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,gBAAD;GAAgB,WAAU;GAAyB,MAAK;EAAa,CAAA,GACrE,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;GAAgB;EAAe,CAAA,CAC3C;;AAEV;AAEA,MAAM,4BAA4B,EAChC,eAGI;CACJ,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;EACZ;CACE,CAAA;AAET;AAEA,MAAM,0BAA0B,EAC9B,iBACA,cACA,iBAAiB,WACjB,YACA,aACA,cACA,uBAUI;CACJ,OACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;GACE,WAAU;GACV,SAAS,OAAO,WAAW,GAAG;GAC9B,eAAY;aAHd,CAKE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;GACb,CAAA,GACD,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;IACZ,iBAAiB,GAAG,gBAAgB;GACrC,CAAA,CACE;;EACL,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aACb;EACG,CAAA;EACN,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aAAmC;EAAqB,CAAA;CACxE,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"money-saved-block.cjs","names":["SectionTitle","StateValue","SwapVert"],"sources":["../../src/components/money-saved-block.tsx"],"sourcesContent":["import { SwapVert } from '@epilot/spark-icons'\nimport { SectionTitle, StateValue } from './typography'\n\nconst MoneySavedContainer = ({\n children,\n ariaLabel = 'Money saved today',\n}: {\n children: React.ReactNode\n /** Override the accessible label for the container. Defaults to `\"Money saved today\"`. */\n ariaLabel?: string\n}) => {\n return (\n <div\n aria-label={ariaLabel}\n className=\"flex items-center justify-between gap-4\"\n >\n {children}\n </div>\n )\n}\n\nconst MoneySavedContent = ({ children }: { children: React.ReactNode }) => {\n return <div className=\"flex flex-col gap-1\">{children}</div>\n}\n\nconst MoneySavedTitle = ({ children }: { children: React.ReactNode }) => {\n return <SectionTitle>{children}</SectionTitle>\n}\n\nconst MoneySavedValue = ({ children }: { children: React.ReactNode }) => {\n return <StateValue>{children}</StateValue>\n}\n\nconst MoneySavedDelta = ({ children }: { children: React.ReactNode }) => {\n return (\n <span className=\"flex items-end gap-1 text-sm text-base-success-solid\">\n <SwapVert className=\"rotate-180 [--spark-icon-size:14px]\" />\n <span className=\"tabular-nums\">{children}</span>\n </span>\n )\n}\n\nconst MoneySavedGaugeContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n return (\n <div className=\"relative top-2 flex flex-col items-end gap-1\">\n {children}\n </div>\n )\n}\n\nconst MoneySavedGaugeContent = ({\n autarkyProgress,\n autarkyLabel,\n autarkyCaption = 'Autarky',\n gaugeWidth,\n gaugeHeight,\n gaugeArcPath,\n gaugeStrokeWidth,\n}: {\n autarkyProgress: number\n autarkyLabel: string\n /** Override the caption shown beneath the gauge. Defaults to `\"Autarky\"`. */\n autarkyCaption?: React.ReactNode\n gaugeWidth: number\n gaugeHeight: number\n gaugeArcPath: string\n gaugeStrokeWidth: number\n}) => {\n return (\n <>\n <svg\n className=\"h-[44px] w-[76px]\"\n viewBox={`0 0 ${gaugeWidth} ${gaugeHeight}`}\n aria-hidden=\"true\"\n >\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--neutral-a5)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n />\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--green-a9)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n strokeDasharray={`${autarkyProgress} 1`}\n />\n </svg>\n <span className=\"absolute inset-0 flex items-center justify-center text-sm font-semibold text-gray\">\n {autarkyLabel}\n </span>\n <span className=\"mx-auto text-xs text-gray-light\">{autarkyCaption}</span>\n </>\n )\n}\n\nexport {\n MoneySavedContainer,\n MoneySavedContent,\n MoneySavedTitle,\n MoneySavedValue,\n MoneySavedDelta,\n MoneySavedGaugeContainer,\n MoneySavedGaugeContent,\n}\n"],"mappings":";;;;;;AAGA,MAAM,uBAAuB,EAC3B,UACA,YAAY,0BAKR;CACJ,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,cAAY;EACZ,WAAU;EAET;CACE,CAAA;AAET;AAEA,MAAM,qBAAqB,EAAE,eAA8C;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;EAAuB;CAAc,CAAA;AAC7D;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAACA,8BAAAA,cAAD,EAAe,SAAuB,CAAA;AAC/C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,YAAD,EAAa,SAAqB,CAAA;AAC3C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OACE,iBAAA,GAAA,kBAAA,MAAC,QAAD;EAAM,WAAU;YAAhB,CACE,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,UAAD,EAAU,WAAU,sCAAuC,CAAA,GAC3D,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;GAAgB;EAAe,CAAA,CAC3C;;AAEV;AAEA,MAAM,4BAA4B,EAChC,eAGI;CACJ,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;EACZ;CACE,CAAA;AAET;AAEA,MAAM,0BAA0B,EAC9B,iBACA,cACA,iBAAiB,WACjB,YACA,aACA,cACA,uBAUI;CACJ,OACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;GACE,WAAU;GACV,SAAS,OAAO,WAAW,GAAG;GAC9B,eAAY;aAHd,CAKE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;GACb,CAAA,GACD,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;IACZ,iBAAiB,GAAG,gBAAgB;GACrC,CAAA,CACE;;EACL,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aACb;EACG,CAAA;EACN,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAU;aAAmC;EAAqB,CAAA;CACxE,EAAA,CAAA;AAEN"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { MaterialSymbol } from "../icons/material-symbol.js";
3
2
  import { SectionTitle, StateValue } from "./typography.js";
3
+ import { SwapVert } from "@epilot/spark-icons";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/money-saved-block.tsx
6
6
  const MoneySavedContainer = ({ children, ariaLabel = "Money saved today" }) => {
@@ -25,10 +25,7 @@ const MoneySavedValue = ({ children }) => {
25
25
  const MoneySavedDelta = ({ children }) => {
26
26
  return /* @__PURE__ */ jsxs("span", {
27
27
  className: "flex items-end gap-1 text-sm text-base-success-solid",
28
- children: [/* @__PURE__ */ jsx(MaterialSymbol, {
29
- className: "rotate-180 text-[14px]",
30
- name: "swap_vert"
31
- }), /* @__PURE__ */ jsx("span", {
28
+ children: [/* @__PURE__ */ jsx(SwapVert, { className: "rotate-180 [--spark-icon-size:14px]" }), /* @__PURE__ */ jsx("span", {
32
29
  className: "tabular-nums",
33
30
  children
34
31
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"money-saved-block.js","names":[],"sources":["../../src/components/money-saved-block.tsx"],"sourcesContent":["import { MaterialSymbol } from '../icons/material-symbol'\nimport { SectionTitle, StateValue } from './typography'\n\nconst MoneySavedContainer = ({\n children,\n ariaLabel = 'Money saved today',\n}: {\n children: React.ReactNode\n /** Override the accessible label for the container. Defaults to `\"Money saved today\"`. */\n ariaLabel?: string\n}) => {\n return (\n <div\n aria-label={ariaLabel}\n className=\"flex items-center justify-between gap-4\"\n >\n {children}\n </div>\n )\n}\n\nconst MoneySavedContent = ({ children }: { children: React.ReactNode }) => {\n return <div className=\"flex flex-col gap-1\">{children}</div>\n}\n\nconst MoneySavedTitle = ({ children }: { children: React.ReactNode }) => {\n return <SectionTitle>{children}</SectionTitle>\n}\n\nconst MoneySavedValue = ({ children }: { children: React.ReactNode }) => {\n return <StateValue>{children}</StateValue>\n}\n\nconst MoneySavedDelta = ({ children }: { children: React.ReactNode }) => {\n return (\n <span className=\"flex items-end gap-1 text-sm text-base-success-solid\">\n <MaterialSymbol className=\"rotate-180 text-[14px]\" name=\"swap_vert\" />\n <span className=\"tabular-nums\">{children}</span>\n </span>\n )\n}\n\nconst MoneySavedGaugeContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n return (\n <div className=\"relative top-2 flex flex-col items-end gap-1\">\n {children}\n </div>\n )\n}\n\nconst MoneySavedGaugeContent = ({\n autarkyProgress,\n autarkyLabel,\n autarkyCaption = 'Autarky',\n gaugeWidth,\n gaugeHeight,\n gaugeArcPath,\n gaugeStrokeWidth,\n}: {\n autarkyProgress: number\n autarkyLabel: string\n /** Override the caption shown beneath the gauge. Defaults to `\"Autarky\"`. */\n autarkyCaption?: React.ReactNode\n gaugeWidth: number\n gaugeHeight: number\n gaugeArcPath: string\n gaugeStrokeWidth: number\n}) => {\n return (\n <>\n <svg\n className=\"h-[44px] w-[76px]\"\n viewBox={`0 0 ${gaugeWidth} ${gaugeHeight}`}\n aria-hidden=\"true\"\n >\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--neutral-a5)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n />\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--green-a9)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n strokeDasharray={`${autarkyProgress} 1`}\n />\n </svg>\n <span className=\"absolute inset-0 flex items-center justify-center text-sm font-semibold text-gray\">\n {autarkyLabel}\n </span>\n <span className=\"mx-auto text-xs text-gray-light\">{autarkyCaption}</span>\n </>\n )\n}\n\nexport {\n MoneySavedContainer,\n MoneySavedContent,\n MoneySavedTitle,\n MoneySavedValue,\n MoneySavedDelta,\n MoneySavedGaugeContainer,\n MoneySavedGaugeContent,\n}\n"],"mappings":";;;;;AAGA,MAAM,uBAAuB,EAC3B,UACA,YAAY,0BAKR;CACJ,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EAET;CACE,CAAA;AAET;AAEA,MAAM,qBAAqB,EAAE,eAA8C;CACzE,OAAO,oBAAC,OAAD;EAAK,WAAU;EAAuB;CAAc,CAAA;AAC7D;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,oBAAC,cAAD,EAAe,SAAuB,CAAA;AAC/C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,oBAAC,YAAD,EAAa,SAAqB,CAAA;AAC3C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,gBAAD;GAAgB,WAAU;GAAyB,MAAK;EAAa,CAAA,GACrE,oBAAC,QAAD;GAAM,WAAU;GAAgB;EAAe,CAAA,CAC3C;;AAEV;AAEA,MAAM,4BAA4B,EAChC,eAGI;CACJ,OACE,oBAAC,OAAD;EAAK,WAAU;EACZ;CACE,CAAA;AAET;AAEA,MAAM,0BAA0B,EAC9B,iBACA,cACA,iBAAiB,WACjB,YACA,aACA,cACA,uBAUI;CACJ,OACE,qBAAA,UAAA,EAAA,UAAA;EACE,qBAAC,OAAD;GACE,WAAU;GACV,SAAS,OAAO,WAAW,GAAG;GAC9B,eAAY;aAHd,CAKE,oBAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;GACb,CAAA,GACD,oBAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;IACZ,iBAAiB,GAAG,gBAAgB;GACrC,CAAA,CACE;;EACL,oBAAC,QAAD;GAAM,WAAU;aACb;EACG,CAAA;EACN,oBAAC,QAAD;GAAM,WAAU;aAAmC;EAAqB,CAAA;CACxE,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"money-saved-block.js","names":[],"sources":["../../src/components/money-saved-block.tsx"],"sourcesContent":["import { SwapVert } from '@epilot/spark-icons'\nimport { SectionTitle, StateValue } from './typography'\n\nconst MoneySavedContainer = ({\n children,\n ariaLabel = 'Money saved today',\n}: {\n children: React.ReactNode\n /** Override the accessible label for the container. Defaults to `\"Money saved today\"`. */\n ariaLabel?: string\n}) => {\n return (\n <div\n aria-label={ariaLabel}\n className=\"flex items-center justify-between gap-4\"\n >\n {children}\n </div>\n )\n}\n\nconst MoneySavedContent = ({ children }: { children: React.ReactNode }) => {\n return <div className=\"flex flex-col gap-1\">{children}</div>\n}\n\nconst MoneySavedTitle = ({ children }: { children: React.ReactNode }) => {\n return <SectionTitle>{children}</SectionTitle>\n}\n\nconst MoneySavedValue = ({ children }: { children: React.ReactNode }) => {\n return <StateValue>{children}</StateValue>\n}\n\nconst MoneySavedDelta = ({ children }: { children: React.ReactNode }) => {\n return (\n <span className=\"flex items-end gap-1 text-sm text-base-success-solid\">\n <SwapVert className=\"rotate-180 [--spark-icon-size:14px]\" />\n <span className=\"tabular-nums\">{children}</span>\n </span>\n )\n}\n\nconst MoneySavedGaugeContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n return (\n <div className=\"relative top-2 flex flex-col items-end gap-1\">\n {children}\n </div>\n )\n}\n\nconst MoneySavedGaugeContent = ({\n autarkyProgress,\n autarkyLabel,\n autarkyCaption = 'Autarky',\n gaugeWidth,\n gaugeHeight,\n gaugeArcPath,\n gaugeStrokeWidth,\n}: {\n autarkyProgress: number\n autarkyLabel: string\n /** Override the caption shown beneath the gauge. Defaults to `\"Autarky\"`. */\n autarkyCaption?: React.ReactNode\n gaugeWidth: number\n gaugeHeight: number\n gaugeArcPath: string\n gaugeStrokeWidth: number\n}) => {\n return (\n <>\n <svg\n className=\"h-[44px] w-[76px]\"\n viewBox={`0 0 ${gaugeWidth} ${gaugeHeight}`}\n aria-hidden=\"true\"\n >\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--neutral-a5)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n />\n <path\n d={gaugeArcPath}\n fill=\"none\"\n stroke=\"var(--green-a9)\"\n strokeWidth={gaugeStrokeWidth}\n strokeLinecap=\"round\"\n pathLength={1}\n strokeDasharray={`${autarkyProgress} 1`}\n />\n </svg>\n <span className=\"absolute inset-0 flex items-center justify-center text-sm font-semibold text-gray\">\n {autarkyLabel}\n </span>\n <span className=\"mx-auto text-xs text-gray-light\">{autarkyCaption}</span>\n </>\n )\n}\n\nexport {\n MoneySavedContainer,\n MoneySavedContent,\n MoneySavedTitle,\n MoneySavedValue,\n MoneySavedDelta,\n MoneySavedGaugeContainer,\n MoneySavedGaugeContent,\n}\n"],"mappings":";;;;;AAGA,MAAM,uBAAuB,EAC3B,UACA,YAAY,0BAKR;CACJ,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EAET;CACE,CAAA;AAET;AAEA,MAAM,qBAAqB,EAAE,eAA8C;CACzE,OAAO,oBAAC,OAAD;EAAK,WAAU;EAAuB;CAAc,CAAA;AAC7D;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,oBAAC,cAAD,EAAe,SAAuB,CAAA;AAC/C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OAAO,oBAAC,YAAD,EAAa,SAAqB,CAAA;AAC3C;AAEA,MAAM,mBAAmB,EAAE,eAA8C;CACvE,OACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,UAAD,EAAU,WAAU,sCAAuC,CAAA,GAC3D,oBAAC,QAAD;GAAM,WAAU;GAAgB;EAAe,CAAA,CAC3C;;AAEV;AAEA,MAAM,4BAA4B,EAChC,eAGI;CACJ,OACE,oBAAC,OAAD;EAAK,WAAU;EACZ;CACE,CAAA;AAET;AAEA,MAAM,0BAA0B,EAC9B,iBACA,cACA,iBAAiB,WACjB,YACA,aACA,cACA,uBAUI;CACJ,OACE,qBAAA,UAAA,EAAA,UAAA;EACE,qBAAC,OAAD;GACE,WAAU;GACV,SAAS,OAAO,WAAW,GAAG;GAC9B,eAAY;aAHd,CAKE,oBAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;GACb,CAAA,GACD,oBAAC,QAAD;IACE,GAAG;IACH,MAAK;IACL,QAAO;IACP,aAAa;IACb,eAAc;IACd,YAAY;IACZ,iBAAiB,GAAG,gBAAgB;GACrC,CAAA,CACE;;EACL,oBAAC,QAAD;GAAM,WAAU;aACb;EACG,CAAA;EACN,oBAAC,QAAD;GAAM,WAAU;aAAmC;EAAqB,CAAA;CACxE,EAAA,CAAA;AAEN"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
3
+ let _epilot_spark_icons = require("@epilot/spark-icons");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  let class_variance_authority = require("class-variance-authority");
6
6
  //#region src/components/on-off-button.tsx
@@ -23,10 +23,7 @@ function OnOffButton({ disabled, isOn, onClick, className }) {
23
23
  disabled,
24
24
  onClick: handleClick,
25
25
  type: "button",
26
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
27
- className: "block text-[16px]! leading-none",
28
- name: "power_settings_new"
29
- })
26
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.PowerSettingsNew, { className: "block leading-none [--spark-icon-size:16px]" })
30
27
  });
31
28
  }
32
29
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"on-off-button.cjs","names":["MaterialSymbol"],"sources":["../../src/components/on-off-button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport type { MouseEvent } from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\n\ninterface OnOffButtonProps {\n isOn: boolean\n disabled?: boolean\n onClick: () => void\n className?: string\n}\n\nexport function OnOffButton({\n disabled,\n isOn,\n onClick,\n className,\n}: OnOffButtonProps) {\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation()\n onClick()\n }\n\n const onOfButtonClassName = cva(\n 'focus-visible:ring-primary inline-flex size-9 min-w-9 cursor-pointer items-center justify-center justify-self-end rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-60',\n {\n variants: {\n isOn: {\n true: 'bg-base-success-soft text-success hover:bg-base-success-soft/80',\n false: 'border border-gray text-gray-light hover:bg-base-gray-soft',\n },\n },\n },\n )\n\n return (\n <button\n aria-label={isOn ? 'Turn off' : 'Turn on'}\n aria-pressed={isOn}\n className={onOfButtonClassName({ isOn, className })}\n disabled={disabled}\n onClick={handleClick}\n type=\"button\"\n >\n <MaterialSymbol\n className=\"block text-[16px]! leading-none\"\n name=\"power_settings_new\"\n />\n </button>\n )\n}\n"],"mappings":";;;;;;AAWA,SAAgB,YAAY,EAC1B,UACA,MACA,SACA,aACmB;CACnB,MAAM,eAAe,UAAyC;EAC5D,MAAM,gBAAgB;EACtB,QAAQ;CACV;CAEA,MAAM,uBAAA,GAAA,yBAAA,KACJ,wSACA,EACE,UAAU,EACR,MAAM;EACJ,MAAM;EACN,OAAO;CACT,EACF,EACF,CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACE,cAAY,OAAO,aAAa;EAChC,gBAAc;EACd,WAAW,oBAAoB;GAAE;GAAM;EAAU,CAAC;EACxC;EACV,SAAS;EACT,MAAK;YAEL,iBAAA,GAAA,kBAAA,KAACA,8BAAAA,gBAAD;GACE,WAAU;GACV,MAAK;EACN,CAAA;CACK,CAAA;AAEZ"}
1
+ {"version":3,"file":"on-off-button.cjs","names":["PowerSettingsNew"],"sources":["../../src/components/on-off-button.tsx"],"sourcesContent":["import { PowerSettingsNew } from '@epilot/spark-icons'\nimport { cva } from 'class-variance-authority'\nimport type { MouseEvent } from 'react'\n\ninterface OnOffButtonProps {\n isOn: boolean\n disabled?: boolean\n onClick: () => void\n className?: string\n}\n\nexport function OnOffButton({\n disabled,\n isOn,\n onClick,\n className,\n}: OnOffButtonProps) {\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation()\n onClick()\n }\n\n const onOfButtonClassName = cva(\n 'focus-visible:ring-primary inline-flex size-9 min-w-9 cursor-pointer items-center justify-center justify-self-end rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-60',\n {\n variants: {\n isOn: {\n true: 'bg-base-success-soft text-success hover:bg-base-success-soft/80',\n false: 'border border-gray text-gray-light hover:bg-base-gray-soft',\n },\n },\n },\n )\n\n return (\n <button\n aria-label={isOn ? 'Turn off' : 'Turn on'}\n aria-pressed={isOn}\n className={onOfButtonClassName({ isOn, className })}\n disabled={disabled}\n onClick={handleClick}\n type=\"button\"\n >\n <PowerSettingsNew className=\"block leading-none [--spark-icon-size:16px]\" />\n </button>\n )\n}\n"],"mappings":";;;;;;AAWA,SAAgB,YAAY,EAC1B,UACA,MACA,SACA,aACmB;CACnB,MAAM,eAAe,UAAyC;EAC5D,MAAM,gBAAgB;EACtB,QAAQ;CACV;CAEA,MAAM,uBAAA,GAAA,yBAAA,KACJ,wSACA,EACE,UAAU,EACR,MAAM;EACJ,MAAM;EACN,OAAO;CACT,EACF,EACF,CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACE,cAAY,OAAO,aAAa;EAChC,gBAAc;EACd,WAAW,oBAAoB;GAAE;GAAM;EAAU,CAAC;EACxC;EACV,SAAS;EACT,MAAK;YAEL,iBAAA,GAAA,kBAAA,KAACA,oBAAAA,kBAAD,EAAkB,WAAU,8CAA+C,CAAA;CACrE,CAAA;AAEZ"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { MaterialSymbol } from "../icons/material-symbol.js";
2
+ import { PowerSettingsNew } from "@epilot/spark-icons";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { cva } from "class-variance-authority";
5
5
  //#region src/components/on-off-button.tsx
@@ -22,10 +22,7 @@ function OnOffButton({ disabled, isOn, onClick, className }) {
22
22
  disabled,
23
23
  onClick: handleClick,
24
24
  type: "button",
25
- children: /* @__PURE__ */ jsx(MaterialSymbol, {
26
- className: "block text-[16px]! leading-none",
27
- name: "power_settings_new"
28
- })
25
+ children: /* @__PURE__ */ jsx(PowerSettingsNew, { className: "block leading-none [--spark-icon-size:16px]" })
29
26
  });
30
27
  }
31
28
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"on-off-button.js","names":[],"sources":["../../src/components/on-off-button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport type { MouseEvent } from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\n\ninterface OnOffButtonProps {\n isOn: boolean\n disabled?: boolean\n onClick: () => void\n className?: string\n}\n\nexport function OnOffButton({\n disabled,\n isOn,\n onClick,\n className,\n}: OnOffButtonProps) {\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation()\n onClick()\n }\n\n const onOfButtonClassName = cva(\n 'focus-visible:ring-primary inline-flex size-9 min-w-9 cursor-pointer items-center justify-center justify-self-end rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-60',\n {\n variants: {\n isOn: {\n true: 'bg-base-success-soft text-success hover:bg-base-success-soft/80',\n false: 'border border-gray text-gray-light hover:bg-base-gray-soft',\n },\n },\n },\n )\n\n return (\n <button\n aria-label={isOn ? 'Turn off' : 'Turn on'}\n aria-pressed={isOn}\n className={onOfButtonClassName({ isOn, className })}\n disabled={disabled}\n onClick={handleClick}\n type=\"button\"\n >\n <MaterialSymbol\n className=\"block text-[16px]! leading-none\"\n name=\"power_settings_new\"\n />\n </button>\n )\n}\n"],"mappings":";;;;;AAWA,SAAgB,YAAY,EAC1B,UACA,MACA,SACA,aACmB;CACnB,MAAM,eAAe,UAAyC;EAC5D,MAAM,gBAAgB;EACtB,QAAQ;CACV;CAEA,MAAM,sBAAsB,IAC1B,wSACA,EACE,UAAU,EACR,MAAM;EACJ,MAAM;EACN,OAAO;CACT,EACF,EACF,CACF;CAEA,OACE,oBAAC,UAAD;EACE,cAAY,OAAO,aAAa;EAChC,gBAAc;EACd,WAAW,oBAAoB;GAAE;GAAM;EAAU,CAAC;EACxC;EACV,SAAS;EACT,MAAK;YAEL,oBAAC,gBAAD;GACE,WAAU;GACV,MAAK;EACN,CAAA;CACK,CAAA;AAEZ"}
1
+ {"version":3,"file":"on-off-button.js","names":[],"sources":["../../src/components/on-off-button.tsx"],"sourcesContent":["import { PowerSettingsNew } from '@epilot/spark-icons'\nimport { cva } from 'class-variance-authority'\nimport type { MouseEvent } from 'react'\n\ninterface OnOffButtonProps {\n isOn: boolean\n disabled?: boolean\n onClick: () => void\n className?: string\n}\n\nexport function OnOffButton({\n disabled,\n isOn,\n onClick,\n className,\n}: OnOffButtonProps) {\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation()\n onClick()\n }\n\n const onOfButtonClassName = cva(\n 'focus-visible:ring-primary inline-flex size-9 min-w-9 cursor-pointer items-center justify-center justify-self-end rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-60',\n {\n variants: {\n isOn: {\n true: 'bg-base-success-soft text-success hover:bg-base-success-soft/80',\n false: 'border border-gray text-gray-light hover:bg-base-gray-soft',\n },\n },\n },\n )\n\n return (\n <button\n aria-label={isOn ? 'Turn off' : 'Turn on'}\n aria-pressed={isOn}\n className={onOfButtonClassName({ isOn, className })}\n disabled={disabled}\n onClick={handleClick}\n type=\"button\"\n >\n <PowerSettingsNew className=\"block leading-none [--spark-icon-size:16px]\" />\n </button>\n )\n}\n"],"mappings":";;;;;AAWA,SAAgB,YAAY,EAC1B,UACA,MACA,SACA,aACmB;CACnB,MAAM,eAAe,UAAyC;EAC5D,MAAM,gBAAgB;EACtB,QAAQ;CACV;CAEA,MAAM,sBAAsB,IAC1B,wSACA,EACE,UAAU,EACR,MAAM;EACJ,MAAM;EACN,OAAO;CACT,EACF,EACF,CACF;CAEA,OACE,oBAAC,UAAD;EACE,cAAY,OAAO,aAAa;EAChC,gBAAc;EACd,WAAW,oBAAoB;GAAE;GAAM;EAAU,CAAC;EACxC;EACV,SAAS;EACT,MAAK;YAEL,oBAAC,kBAAD,EAAkB,WAAU,8CAA+C,CAAA;CACrE,CAAA;AAEZ"}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_chunk = require("../chunk-DY84GLCh.cjs");
4
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
5
4
  const require_components_button = require("./button.cjs");
6
5
  const require_components_typography = require("./typography.cjs");
7
6
  let react = require("react");
8
7
  react = require_chunk.__toESM(react);
8
+ let _epilot_spark_icons = require("@epilot/spark-icons");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
10
  let _base_ui_react_merge_props = require("@base-ui/react/merge-props");
11
11
  let _base_ui_react_use_render = require("@base-ui/react/use-render");
@@ -26,7 +26,7 @@ const PageHeaderBackButton = react.forwardRef(({ children, className, "aria-labe
26
26
  "aria-label": ariaLabel,
27
27
  className: (0, cnfast.cn)("col-start-1 justify-self-start", className),
28
28
  ...props,
29
- children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, { name: "chevron_left" })
29
+ children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.ChevronLeft, {})
30
30
  }));
31
31
  PageHeaderBackButton.displayName = "PageHeaderBackButton";
32
32
  const PageHeaderTitle = ({ className, ...props }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_typography.PageTitle, {
@@ -1 +1 @@
1
- {"version":3,"file":"page-header.cjs","names":["React","Button","MaterialSymbol","PageTitle"],"sources":["../../src/components/page-header.tsx"],"sourcesContent":["import { mergeProps } from '@base-ui/react/merge-props'\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { PageTitle } from './typography'\n\nconst PageHeader = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <header\n ref={ref}\n className={cn(\n 'grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3',\n className,\n )}\n {...props}\n />\n))\nPageHeader.displayName = 'PageHeader'\n\nconst PageHeaderBackButton = React.forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, 'size' | 'styleVariant' | 'color'>\n>(\n (\n { children, className, 'aria-label': ariaLabel = 'Back', ...props },\n ref,\n ) => (\n <Button\n ref={ref}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n type=\"button\"\n aria-label={ariaLabel}\n className={cn('col-start-1 justify-self-start', className)}\n {...props}\n >\n {children ?? <MaterialSymbol name=\"chevron_left\" />}\n </Button>\n ),\n)\nPageHeaderBackButton.displayName = 'PageHeaderBackButton'\n\nconst PageHeaderTitle = ({\n className,\n ...props\n}: React.ComponentProps<'h2'>) => (\n <PageTitle\n className={cn('col-start-2 justify-self-center text-center', className)}\n {...props}\n />\n)\n\ntype PageHeaderActionsProps = useRender.ComponentProps<'div'>\n\nconst PageHeaderActions = ({\n className,\n render,\n ...props\n}: PageHeaderActionsProps) => {\n return useRender({\n defaultTagName: 'div',\n render,\n props: mergeProps<'div'>(\n {\n className: cn(\n 'col-start-3 flex size-10 shrink-0 items-center justify-self-end',\n className,\n ),\n },\n props,\n ),\n })\n}\nPageHeaderActions.displayName = 'PageHeaderActions'\n\nexport { PageHeader, PageHeaderActions, PageHeaderBackButton, PageHeaderTitle }\nexport type { PageHeaderActionsProps }\n"],"mappings":";;;;;;;;;;;;;AAQA,MAAM,aAAaA,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,UAAD;CACO;CACL,YAAA,GAAA,OAAA,IACE,wEACA,SACF;CACA,GAAI;AACL,CAAA,CACF;AACD,WAAW,cAAc;AAEzB,MAAM,uBAAuBA,MAAM,YAK/B,EAAE,UAAU,WAAW,cAAc,YAAY,QAAQ,GAAG,SAC5D,QAEA,iBAAA,GAAA,kBAAA,KAACC,0BAAAA,QAAD;CACO;CACL,MAAK;CACL,cAAa;CACb,OAAM;CACN,MAAK;CACL,cAAY;CACZ,YAAA,GAAA,OAAA,IAAc,kCAAkC,SAAS;CACzD,GAAI;WAEH,YAAY,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,gBAAD,EAAgB,MAAK,eAAgB,CAAA;AAC5C,CAAA,CAEZ;AACA,qBAAqB,cAAc;AAEnC,MAAM,mBAAmB,EACvB,WACA,GAAG,YAEH,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,WAAD;CACE,YAAA,GAAA,OAAA,IAAc,+CAA+C,SAAS;CACtE,GAAI;AACL,CAAA;AAKH,MAAM,qBAAqB,EACzB,WACA,QACA,GAAG,YACyB;CAC5B,QAAA,GAAA,0BAAA,WAAiB;EACf,gBAAgB;EAChB;EACA,QAAA,GAAA,2BAAA,YACE,EACE,YAAA,GAAA,OAAA,IACE,mEACA,SACF,EACF,GACA,KACF;CACF,CAAC;AACH;AACA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"page-header.cjs","names":["React","Button","ChevronLeft","PageTitle"],"sources":["../../src/components/page-header.tsx"],"sourcesContent":["import { mergeProps } from '@base-ui/react/merge-props'\nimport { useRender } from '@base-ui/react/use-render'\nimport { ChevronLeft } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { PageTitle } from './typography'\n\nconst PageHeader = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <header\n ref={ref}\n className={cn(\n 'grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3',\n className,\n )}\n {...props}\n />\n))\nPageHeader.displayName = 'PageHeader'\n\nconst PageHeaderBackButton = React.forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, 'size' | 'styleVariant' | 'color'>\n>(\n (\n { children, className, 'aria-label': ariaLabel = 'Back', ...props },\n ref,\n ) => (\n <Button\n ref={ref}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n type=\"button\"\n aria-label={ariaLabel}\n className={cn('col-start-1 justify-self-start', className)}\n {...props}\n >\n {children ?? <ChevronLeft />}\n </Button>\n ),\n)\nPageHeaderBackButton.displayName = 'PageHeaderBackButton'\n\nconst PageHeaderTitle = ({\n className,\n ...props\n}: React.ComponentProps<'h2'>) => (\n <PageTitle\n className={cn('col-start-2 justify-self-center text-center', className)}\n {...props}\n />\n)\n\ntype PageHeaderActionsProps = useRender.ComponentProps<'div'>\n\nconst PageHeaderActions = ({\n className,\n render,\n ...props\n}: PageHeaderActionsProps) => {\n return useRender({\n defaultTagName: 'div',\n render,\n props: mergeProps<'div'>(\n {\n className: cn(\n 'col-start-3 flex size-10 shrink-0 items-center justify-self-end',\n className,\n ),\n },\n props,\n ),\n })\n}\nPageHeaderActions.displayName = 'PageHeaderActions'\n\nexport { PageHeader, PageHeaderActions, PageHeaderBackButton, PageHeaderTitle }\nexport type { PageHeaderActionsProps }\n"],"mappings":";;;;;;;;;;;;;AAQA,MAAM,aAAaA,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,UAAD;CACO;CACL,YAAA,GAAA,OAAA,IACE,wEACA,SACF;CACA,GAAI;AACL,CAAA,CACF;AACD,WAAW,cAAc;AAEzB,MAAM,uBAAuBA,MAAM,YAK/B,EAAE,UAAU,WAAW,cAAc,YAAY,QAAQ,GAAG,SAC5D,QAEA,iBAAA,GAAA,kBAAA,KAACC,0BAAAA,QAAD;CACO;CACL,MAAK;CACL,cAAa;CACb,OAAM;CACN,MAAK;CACL,cAAY;CACZ,YAAA,GAAA,OAAA,IAAc,kCAAkC,SAAS;CACzD,GAAI;WAEH,YAAY,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,aAAD,CAAc,CAAA;AACrB,CAAA,CAEZ;AACA,qBAAqB,cAAc;AAEnC,MAAM,mBAAmB,EACvB,WACA,GAAG,YAEH,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,WAAD;CACE,YAAA,GAAA,OAAA,IAAc,+CAA+C,SAAS;CACtE,GAAI;AACL,CAAA;AAKH,MAAM,qBAAqB,EACzB,WACA,QACA,GAAG,YACyB;CAC5B,QAAA,GAAA,0BAAA,WAAiB;EACf,gBAAgB;EAChB;EACA,QAAA,GAAA,2BAAA,YACE,EACE,YAAA,GAAA,OAAA,IACE,mEACA,SACF,EACF,GACA,KACF;CACF,CAAC;AACH;AACA,kBAAkB,cAAc"}
@@ -6,7 +6,7 @@ import { useRender } from "@base-ui/react/use-render";
6
6
 
7
7
  //#region src/components/page-header.d.ts
8
8
  declare const PageHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
9
- declare const PageHeaderBackButton: React$1.ForwardRefExoticComponent<Omit<ButtonProps, "styleVariant" | "color" | "size"> & React$1.RefAttributes<HTMLButtonElement>>;
9
+ declare const PageHeaderBackButton: React$1.ForwardRefExoticComponent<Omit<ButtonProps, "color" | "styleVariant" | "size"> & React$1.RefAttributes<HTMLButtonElement>>;
10
10
  declare const PageHeaderTitle: ({
11
11
  className,
12
12
  ...props
@@ -6,7 +6,7 @@ import { useRender } from "@base-ui/react/use-render";
6
6
 
7
7
  //#region src/components/page-header.d.ts
8
8
  declare const PageHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
9
- declare const PageHeaderBackButton: React$1.ForwardRefExoticComponent<Omit<ButtonProps, "styleVariant" | "color" | "size"> & React$1.RefAttributes<HTMLButtonElement>>;
9
+ declare const PageHeaderBackButton: React$1.ForwardRefExoticComponent<Omit<ButtonProps, "color" | "styleVariant" | "size"> & React$1.RefAttributes<HTMLButtonElement>>;
10
10
  declare const PageHeaderTitle: ({
11
11
  className,
12
12
  ...props
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
- import { MaterialSymbol } from "../icons/material-symbol.js";
4
3
  import { Button } from "./button.js";
5
4
  import { PageTitle } from "./typography.js";
6
5
  import * as React$1 from "react";
6
+ import { ChevronLeft } from "@epilot/spark-icons";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { mergeProps } from "@base-ui/react/merge-props";
9
9
  import { useRender } from "@base-ui/react/use-render";
@@ -23,7 +23,7 @@ const PageHeaderBackButton = React$1.forwardRef(({ children, className, "aria-la
23
23
  "aria-label": ariaLabel,
24
24
  className: cn("col-start-1 justify-self-start", className),
25
25
  ...props,
26
- children: children ?? /* @__PURE__ */ jsx(MaterialSymbol, { name: "chevron_left" })
26
+ children: children ?? /* @__PURE__ */ jsx(ChevronLeft, {})
27
27
  }));
28
28
  PageHeaderBackButton.displayName = "PageHeaderBackButton";
29
29
  const PageHeaderTitle = ({ className, ...props }) => /* @__PURE__ */ jsx(PageTitle, {
@@ -1 +1 @@
1
- {"version":3,"file":"page-header.js","names":["React"],"sources":["../../src/components/page-header.tsx"],"sourcesContent":["import { mergeProps } from '@base-ui/react/merge-props'\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { PageTitle } from './typography'\n\nconst PageHeader = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <header\n ref={ref}\n className={cn(\n 'grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3',\n className,\n )}\n {...props}\n />\n))\nPageHeader.displayName = 'PageHeader'\n\nconst PageHeaderBackButton = React.forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, 'size' | 'styleVariant' | 'color'>\n>(\n (\n { children, className, 'aria-label': ariaLabel = 'Back', ...props },\n ref,\n ) => (\n <Button\n ref={ref}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n type=\"button\"\n aria-label={ariaLabel}\n className={cn('col-start-1 justify-self-start', className)}\n {...props}\n >\n {children ?? <MaterialSymbol name=\"chevron_left\" />}\n </Button>\n ),\n)\nPageHeaderBackButton.displayName = 'PageHeaderBackButton'\n\nconst PageHeaderTitle = ({\n className,\n ...props\n}: React.ComponentProps<'h2'>) => (\n <PageTitle\n className={cn('col-start-2 justify-self-center text-center', className)}\n {...props}\n />\n)\n\ntype PageHeaderActionsProps = useRender.ComponentProps<'div'>\n\nconst PageHeaderActions = ({\n className,\n render,\n ...props\n}: PageHeaderActionsProps) => {\n return useRender({\n defaultTagName: 'div',\n render,\n props: mergeProps<'div'>(\n {\n className: cn(\n 'col-start-3 flex size-10 shrink-0 items-center justify-self-end',\n className,\n ),\n },\n props,\n ),\n })\n}\nPageHeaderActions.displayName = 'PageHeaderActions'\n\nexport { PageHeader, PageHeaderActions, PageHeaderBackButton, PageHeaderTitle }\nexport type { PageHeaderActionsProps }\n"],"mappings":";;;;;;;;;;AAQA,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,UAAD;CACO;CACL,WAAW,GACT,wEACA,SACF;CACA,GAAI;AACL,CAAA,CACF;AACD,WAAW,cAAc;AAEzB,MAAM,uBAAuBA,QAAM,YAK/B,EAAE,UAAU,WAAW,cAAc,YAAY,QAAQ,GAAG,SAC5D,QAEA,oBAAC,QAAD;CACO;CACL,MAAK;CACL,cAAa;CACb,OAAM;CACN,MAAK;CACL,cAAY;CACZ,WAAW,GAAG,kCAAkC,SAAS;CACzD,GAAI;WAEH,YAAY,oBAAC,gBAAD,EAAgB,MAAK,eAAgB,CAAA;AAC5C,CAAA,CAEZ;AACA,qBAAqB,cAAc;AAEnC,MAAM,mBAAmB,EACvB,WACA,GAAG,YAEH,oBAAC,WAAD;CACE,WAAW,GAAG,+CAA+C,SAAS;CACtE,GAAI;AACL,CAAA;AAKH,MAAM,qBAAqB,EACzB,WACA,QACA,GAAG,YACyB;CAC5B,OAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,WACL,EACE,WAAW,GACT,mEACA,SACF,EACF,GACA,KACF;CACF,CAAC;AACH;AACA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"page-header.js","names":["React"],"sources":["../../src/components/page-header.tsx"],"sourcesContent":["import { mergeProps } from '@base-ui/react/merge-props'\nimport { useRender } from '@base-ui/react/use-render'\nimport { ChevronLeft } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { PageTitle } from './typography'\n\nconst PageHeader = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <header\n ref={ref}\n className={cn(\n 'grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3',\n className,\n )}\n {...props}\n />\n))\nPageHeader.displayName = 'PageHeader'\n\nconst PageHeaderBackButton = React.forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, 'size' | 'styleVariant' | 'color'>\n>(\n (\n { children, className, 'aria-label': ariaLabel = 'Back', ...props },\n ref,\n ) => (\n <Button\n ref={ref}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n type=\"button\"\n aria-label={ariaLabel}\n className={cn('col-start-1 justify-self-start', className)}\n {...props}\n >\n {children ?? <ChevronLeft />}\n </Button>\n ),\n)\nPageHeaderBackButton.displayName = 'PageHeaderBackButton'\n\nconst PageHeaderTitle = ({\n className,\n ...props\n}: React.ComponentProps<'h2'>) => (\n <PageTitle\n className={cn('col-start-2 justify-self-center text-center', className)}\n {...props}\n />\n)\n\ntype PageHeaderActionsProps = useRender.ComponentProps<'div'>\n\nconst PageHeaderActions = ({\n className,\n render,\n ...props\n}: PageHeaderActionsProps) => {\n return useRender({\n defaultTagName: 'div',\n render,\n props: mergeProps<'div'>(\n {\n className: cn(\n 'col-start-3 flex size-10 shrink-0 items-center justify-self-end',\n className,\n ),\n },\n props,\n ),\n })\n}\nPageHeaderActions.displayName = 'PageHeaderActions'\n\nexport { PageHeader, PageHeaderActions, PageHeaderBackButton, PageHeaderTitle }\nexport type { PageHeaderActionsProps }\n"],"mappings":";;;;;;;;;;AAQA,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,UAAD;CACO;CACL,WAAW,GACT,wEACA,SACF;CACA,GAAI;AACL,CAAA,CACF;AACD,WAAW,cAAc;AAEzB,MAAM,uBAAuBA,QAAM,YAK/B,EAAE,UAAU,WAAW,cAAc,YAAY,QAAQ,GAAG,SAC5D,QAEA,oBAAC,QAAD;CACO;CACL,MAAK;CACL,cAAa;CACb,OAAM;CACN,MAAK;CACL,cAAY;CACZ,WAAW,GAAG,kCAAkC,SAAS;CACzD,GAAI;WAEH,YAAY,oBAAC,aAAD,CAAc,CAAA;AACrB,CAAA,CAEZ;AACA,qBAAqB,cAAc;AAEnC,MAAM,mBAAmB,EACvB,WACA,GAAG,YAEH,oBAAC,WAAD;CACE,WAAW,GAAG,+CAA+C,SAAS;CACtE,GAAI;AACL,CAAA;AAKH,MAAM,qBAAqB,EACzB,WACA,QACA,GAAG,YACyB;CAC5B,OAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,WACL,EACE,WAAW,GACT,mEACA,SACF,EACF,GACA,KACF;CACF,CAAC;AACH;AACA,kBAAkB,cAAc"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
4
3
  const require_components_button = require("./button.cjs");
4
+ let _epilot_spark_icons = require("@epilot/spark-icons");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
6
  let cnfast = require("cnfast");
7
7
  //#region src/components/period-tabs.tsx
@@ -46,7 +46,7 @@ const PeriodStepperButtonPrev = ({ className, "aria-label": ariaLabel = "Previou
46
46
  styleVariant: "ghost",
47
47
  color: "neutral",
48
48
  ...rest,
49
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, { name: "chevron_left" })
49
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.ChevronLeft, {})
50
50
  });
51
51
  };
52
52
  /**
@@ -62,10 +62,7 @@ const PeriodStepperButtonNext = ({ className, "aria-label": ariaLabel = "Next pe
62
62
  styleVariant: "ghost",
63
63
  color: "neutral",
64
64
  ...rest,
65
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
66
- className: "text-[16px]",
67
- name: "chevron_right"
68
- })
65
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.ChevronRight, {})
69
66
  });
70
67
  };
71
68
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"period-tabs.cjs","names":["Button","MaterialSymbol"],"sources":["../../src/components/period-tabs.tsx"],"sourcesContent":["import { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\n\n/**\n * Outer container for a period picker — typically wraps a tabs row on top of\n * a date stepper.\n */\nconst PeriodTabs = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex flex-col items-center gap-2', className)}\n {...rest}\n />\n )\n}\n\n/**\n * Date stepper row — renders prev / label / next children inline. Pair with\n * any icon button + `PeriodStepperLabel` (or custom content) inside.\n */\nconst PeriodStepper = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-center gap-2 text-gray-light', className)}\n {...rest}\n />\n )\n}\n\n/** Centered label between the stepper buttons. Has a fixed min-width so the\n * stepper doesn't jump as the label text changes length. */\nconst PeriodStepperLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\n 'min-w-40 text-center text-sm font-medium text-gray',\n className,\n )}\n {...rest}\n />\n )\n}\n\n/**\n * Previous-period button — chevron-left icon button with sensible defaults\n * (`styleVariant=\"ghost\"`, `color=\"neutral\"`, `size=\"icon-small\"`, accessible label, and disabled-state\n * styling that matches the next button).\n */\nconst PeriodStepperButtonPrev = ({\n className,\n 'aria-label': ariaLabel = 'Previous period',\n ...rest\n}: Omit<ButtonProps, 'styleVariant' | 'color' | 'size' | 'children'>) => {\n return (\n <Button\n aria-label={ariaLabel}\n className={cn(\n 'disabled:text-gray-light/60 disabled:opacity-40',\n className,\n )}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n {...rest}\n >\n <MaterialSymbol name=\"chevron_left\" />\n </Button>\n )\n}\n\n/**\n * Next-period button — chevron-right icon button with sensible defaults\n * (`styleVariant=\"ghost\"`, `color=\"neutral\"`, `size=\"icon-small\"`, accessible label, and disabled-state\n * styling that matches the previous button).\n */\nconst PeriodStepperButtonNext = ({\n className,\n 'aria-label': ariaLabel = 'Next period',\n ...rest\n}: Omit<ButtonProps, 'styleVariant' | 'color' | 'size' | 'children'>) => {\n return (\n <Button\n aria-label={ariaLabel}\n className={cn(\n 'disabled:text-gray-light/60 disabled:opacity-40',\n className,\n )}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n {...rest}\n >\n <MaterialSymbol className=\"text-[16px]\" name=\"chevron_right\" />\n </Button>\n )\n}\n\nexport {\n PeriodTabs,\n PeriodStepper,\n PeriodStepperLabel,\n PeriodStepperButtonPrev,\n PeriodStepperButtonNext,\n}\n"],"mappings":";;;;;;;;;;;AAQA,MAAM,cAAc,EAAE,WAAW,GAAG,WAAwC;CAC1E,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL;;;;;AAMA,MAAM,iBAAiB,EAAE,WAAW,GAAG,WAAwC;CAC7E,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,2CAA2C,SAAS;EAClE,GAAI;CACL,CAAA;AAEL;;;AAIA,MAAM,sBAAsB,EAC1B,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IACE,sDACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;;;;AAOA,MAAM,2BAA2B,EAC/B,WACA,cAAc,YAAY,mBAC1B,GAAG,WACoE;CACvE,OACE,iBAAA,GAAA,kBAAA,KAACA,0BAAAA,QAAD;EACE,cAAY;EACZ,YAAA,GAAA,OAAA,IACE,mDACA,SACF;EACA,MAAK;EACL,cAAa;EACb,OAAM;EACN,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,gBAAD,EAAgB,MAAK,eAAgB,CAAA;CAC/B,CAAA;AAEZ;;;;;;AAOA,MAAM,2BAA2B,EAC/B,WACA,cAAc,YAAY,eAC1B,GAAG,WACoE;CACvE,OACE,iBAAA,GAAA,kBAAA,KAACD,0BAAAA,QAAD;EACE,cAAY;EACZ,YAAA,GAAA,OAAA,IACE,mDACA,SACF;EACA,MAAK;EACL,cAAa;EACb,OAAM;EACN,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,gBAAD;GAAgB,WAAU;GAAc,MAAK;EAAiB,CAAA;CACxD,CAAA;AAEZ"}
1
+ {"version":3,"file":"period-tabs.cjs","names":["Button","ChevronLeft","ChevronRight"],"sources":["../../src/components/period-tabs.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from '@epilot/spark-icons'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\n\n/**\n * Outer container for a period picker — typically wraps a tabs row on top of\n * a date stepper.\n */\nconst PeriodTabs = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex flex-col items-center gap-2', className)}\n {...rest}\n />\n )\n}\n\n/**\n * Date stepper row — renders prev / label / next children inline. Pair with\n * any icon button + `PeriodStepperLabel` (or custom content) inside.\n */\nconst PeriodStepper = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-center gap-2 text-gray-light', className)}\n {...rest}\n />\n )\n}\n\n/** Centered label between the stepper buttons. Has a fixed min-width so the\n * stepper doesn't jump as the label text changes length. */\nconst PeriodStepperLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn(\n 'min-w-40 text-center text-sm font-medium text-gray',\n className,\n )}\n {...rest}\n />\n )\n}\n\n/**\n * Previous-period button — chevron-left icon button with sensible defaults\n * (`styleVariant=\"ghost\"`, `color=\"neutral\"`, `size=\"icon-small\"`, accessible label, and disabled-state\n * styling that matches the next button).\n */\nconst PeriodStepperButtonPrev = ({\n className,\n 'aria-label': ariaLabel = 'Previous period',\n ...rest\n}: Omit<ButtonProps, 'styleVariant' | 'color' | 'size' | 'children'>) => {\n return (\n <Button\n aria-label={ariaLabel}\n className={cn(\n 'disabled:text-gray-light/60 disabled:opacity-40',\n className,\n )}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n {...rest}\n >\n <ChevronLeft />\n </Button>\n )\n}\n\n/**\n * Next-period button — chevron-right icon button with sensible defaults\n * (`styleVariant=\"ghost\"`, `color=\"neutral\"`, `size=\"icon-small\"`, accessible label, and disabled-state\n * styling that matches the previous button).\n */\nconst PeriodStepperButtonNext = ({\n className,\n 'aria-label': ariaLabel = 'Next period',\n ...rest\n}: Omit<ButtonProps, 'styleVariant' | 'color' | 'size' | 'children'>) => {\n return (\n <Button\n aria-label={ariaLabel}\n className={cn(\n 'disabled:text-gray-light/60 disabled:opacity-40',\n className,\n )}\n size=\"icon-small\"\n styleVariant=\"ghost\"\n color=\"neutral\"\n {...rest}\n >\n <ChevronRight />\n </Button>\n )\n}\n\nexport {\n PeriodTabs,\n PeriodStepper,\n PeriodStepperLabel,\n PeriodStepperButtonPrev,\n PeriodStepperButtonNext,\n}\n"],"mappings":";;;;;;;;;;;AAQA,MAAM,cAAc,EAAE,WAAW,GAAG,WAAwC;CAC1E,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL;;;;;AAMA,MAAM,iBAAiB,EAAE,WAAW,GAAG,WAAwC;CAC7E,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,2CAA2C,SAAS;EAClE,GAAI;CACL,CAAA;AAEL;;;AAIA,MAAM,sBAAsB,EAC1B,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IACE,sDACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;;;;AAOA,MAAM,2BAA2B,EAC/B,WACA,cAAc,YAAY,mBAC1B,GAAG,WACoE;CACvE,OACE,iBAAA,GAAA,kBAAA,KAACA,0BAAAA,QAAD;EACE,cAAY;EACZ,YAAA,GAAA,OAAA,IACE,mDACA,SACF;EACA,MAAK;EACL,cAAa;EACb,OAAM;EACN,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,aAAD,CAAc,CAAA;CACR,CAAA;AAEZ;;;;;;AAOA,MAAM,2BAA2B,EAC/B,WACA,cAAc,YAAY,eAC1B,GAAG,WACoE;CACvE,OACE,iBAAA,GAAA,kBAAA,KAACD,0BAAAA,QAAD;EACE,cAAY;EACZ,YAAA,GAAA,OAAA,IACE,mDACA,SACF;EACA,MAAK;EACL,cAAa;EACb,OAAM;EACN,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACE,oBAAAA,cAAD,CAAe,CAAA;CACT,CAAA;AAEZ"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
- import { MaterialSymbol } from "../icons/material-symbol.js";
4
3
  import { Button } from "./button.js";
4
+ import { ChevronLeft, ChevronRight } from "@epilot/spark-icons";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region src/components/period-tabs.tsx
7
7
  /**
@@ -45,7 +45,7 @@ const PeriodStepperButtonPrev = ({ className, "aria-label": ariaLabel = "Previou
45
45
  styleVariant: "ghost",
46
46
  color: "neutral",
47
47
  ...rest,
48
- children: /* @__PURE__ */ jsx(MaterialSymbol, { name: "chevron_left" })
48
+ children: /* @__PURE__ */ jsx(ChevronLeft, {})
49
49
  });
50
50
  };
51
51
  /**
@@ -61,10 +61,7 @@ const PeriodStepperButtonNext = ({ className, "aria-label": ariaLabel = "Next pe
61
61
  styleVariant: "ghost",
62
62
  color: "neutral",
63
63
  ...rest,
64
- children: /* @__PURE__ */ jsx(MaterialSymbol, {
65
- className: "text-[16px]",
66
- name: "chevron_right"
67
- })
64
+ children: /* @__PURE__ */ jsx(ChevronRight, {})
68
65
  });
69
66
  };
70
67
  //#endregion