@flikk/ui 1.0.0-beta.26 → 1.0.0-beta.29

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 (418) hide show
  1. package/dist/bg/1.webp +0 -0
  2. package/dist/bg/10.webp +0 -0
  3. package/dist/bg/11.webp +0 -0
  4. package/dist/bg/12.webp +0 -0
  5. package/dist/bg/13.webp +0 -0
  6. package/dist/bg/14.webp +0 -0
  7. package/dist/bg/15.webp +0 -0
  8. package/dist/bg/16.webp +0 -0
  9. package/dist/bg/17.webp +0 -0
  10. package/dist/bg/18.webp +0 -0
  11. package/dist/bg/19.webp +0 -0
  12. package/dist/bg/2.webp +0 -0
  13. package/dist/bg/20.webp +0 -0
  14. package/dist/bg/21.webp +0 -0
  15. package/dist/bg/22.webp +0 -0
  16. package/dist/bg/3.webp +0 -0
  17. package/dist/bg/4.webp +0 -0
  18. package/dist/bg/5.webp +0 -0
  19. package/dist/bg/6.webp +0 -0
  20. package/dist/bg/7.webp +0 -0
  21. package/dist/bg/8.webp +0 -0
  22. package/dist/bg/9.webp +0 -0
  23. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  24. package/dist/components/ai/PromptInput/PromptInput.js +7 -140
  25. package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -85
  26. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
  27. package/dist/components/canvas/Background.d.ts +19 -0
  28. package/dist/components/canvas/Background.js +23 -0
  29. package/dist/components/canvas/BaseNode.d.ts +15 -0
  30. package/dist/components/canvas/BaseNode.js +20 -0
  31. package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
  32. package/dist/components/canvas/CanvasToolbar.js +34 -0
  33. package/dist/components/canvas/Edge.d.ts +35 -0
  34. package/dist/components/canvas/Edge.js +97 -0
  35. package/dist/components/canvas/EdgeLayer.d.ts +18 -0
  36. package/dist/components/canvas/EdgeLayer.js +111 -0
  37. package/dist/components/canvas/Handle.d.ts +11 -0
  38. package/dist/components/canvas/Handle.js +63 -0
  39. package/dist/components/canvas/MiniMap.d.ts +22 -0
  40. package/dist/components/canvas/MiniMap.js +105 -0
  41. package/dist/components/canvas/NodeCanvas.d.ts +10 -0
  42. package/dist/components/canvas/NodeCanvas.js +477 -0
  43. package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
  44. package/dist/components/canvas/NodeCanvas.theme.js +9 -0
  45. package/dist/components/canvas/NodeCanvas.types.d.ts +187 -0
  46. package/dist/components/canvas/NodeControls.d.ts +25 -0
  47. package/dist/components/canvas/NodeControls.js +40 -0
  48. package/dist/components/canvas/NodeRenderer.d.ts +19 -0
  49. package/dist/components/canvas/NodeRenderer.js +117 -0
  50. package/dist/components/canvas/changes.d.ts +11 -0
  51. package/dist/components/canvas/changes.js +76 -0
  52. package/dist/components/canvas/context/CanvasContext.d.ts +32 -0
  53. package/dist/components/canvas/context/CanvasContext.js +14 -0
  54. package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
  55. package/dist/components/canvas/context/ConnectionContext.js +13 -0
  56. package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
  57. package/dist/components/canvas/context/HandleRegistry.js +15 -0
  58. package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
  59. package/dist/components/canvas/context/InteractionContext.js +14 -0
  60. package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
  61. package/dist/components/canvas/context/NodeIdContext.js +15 -0
  62. package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
  63. package/dist/components/canvas/hooks/useConnection.js +29 -0
  64. package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
  65. package/dist/components/canvas/hooks/useMarquee.js +91 -0
  66. package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
  67. package/dist/components/canvas/hooks/useNodeDrag.js +110 -0
  68. package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
  69. package/dist/components/canvas/hooks/usePanZoom.js +189 -0
  70. package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
  71. package/dist/components/canvas/hooks/useViewport.js +35 -0
  72. package/dist/components/canvas/index.d.ts +14 -0
  73. package/dist/components/canvas/index.js +12 -0
  74. package/dist/components/canvas/layout.d.ts +22 -0
  75. package/dist/components/canvas/layout.js +67 -0
  76. package/dist/components/canvas/utils.d.ts +4 -0
  77. package/dist/components/canvas/utils.js +16 -0
  78. package/dist/components/charts/AreaChart/AreaChart.js +136 -101
  79. package/dist/components/charts/AreaChart/AreaChart.types.d.ts +5 -5
  80. package/dist/components/charts/AreaChart/AreaChart.types.js +1 -0
  81. package/dist/components/charts/BarChart/BarChart.js +207 -143
  82. package/dist/components/charts/BarChart/BarChart.types.d.ts +4 -4
  83. package/dist/components/charts/BarChart/BarChart.types.js +1 -0
  84. package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
  85. package/dist/components/charts/LineChart/LineChart.js +88 -72
  86. package/dist/components/charts/LineChart/LineChart.types.d.ts +3 -3
  87. package/dist/components/charts/RadarChart/RadarChart.js +1 -1
  88. package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -2
  89. package/dist/components/charts/ScatterPlot/ScatterPlot.js +62 -72
  90. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -1
  91. package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +3 -9
  92. package/dist/components/charts/StackedBarChart/StackedBarChart.js +33 -33
  93. package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
  94. package/dist/components/charts/hooks/index.d.ts +2 -0
  95. package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
  96. package/dist/components/charts/hooks/useChartDimensions.js +42 -0
  97. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
  98. package/dist/components/charts/types/chart.types.d.ts +11 -2
  99. package/dist/components/charts/types/chart.types.js +10 -3
  100. package/dist/components/core/Avatar/Avatar.js +5 -1
  101. package/dist/components/core/AvatarGroup/AvatarGroup.js +5 -1
  102. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +4 -2
  103. package/dist/components/core/Badge/Badge.js +1 -1
  104. package/dist/components/core/Badge/Badge.theme.js +16 -15
  105. package/dist/components/core/Button/Button.js +1 -1
  106. package/dist/components/core/Button/Button.theme.js +3 -3
  107. package/dist/components/core/Calendar/Calendar.theme.js +1 -1
  108. package/dist/components/core/Card/Card.js +7 -3
  109. package/dist/components/core/Card/Card.theme.js +3 -3
  110. package/dist/components/core/Card/Card.types.d.ts +27 -2
  111. package/dist/components/core/CommandPalette/CommandItem.js +4 -5
  112. package/dist/components/core/CommandPalette/CommandPalette.js +1 -1
  113. package/dist/components/core/CommandPalette/CommandPalette.theme.js +11 -13
  114. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +0 -2
  115. package/dist/components/core/ContextMenu/ContextMenu.theme.js +14 -15
  116. package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
  117. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
  118. package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
  119. package/dist/components/core/DotSeparator/DotSeparator.js +19 -0
  120. package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
  121. package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
  122. package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
  123. package/dist/components/core/DotSeparator/index.d.ts +3 -0
  124. package/dist/components/core/Dropdown/Dropdown.theme.js +5 -6
  125. package/dist/components/core/Dropdown/DropdownItem.js +1 -1
  126. package/dist/components/core/Dropdown/DropdownMenu.js +58 -30
  127. package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
  128. package/dist/components/core/HeroCard/HeroCard.js +99 -0
  129. package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
  130. package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
  131. package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
  132. package/dist/components/core/HeroCard/index.d.ts +4 -0
  133. package/dist/components/core/Kbd/Kbd.theme.js +1 -1
  134. package/dist/components/core/MenuItem/MenuItem.js +5 -2
  135. package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
  136. package/dist/components/core/MenuItem/MenuItem.theme.js +19 -16
  137. package/dist/components/core/MenuItem/MenuItem.types.d.ts +2 -0
  138. package/dist/components/core/Modal/Modal.d.ts +1 -1
  139. package/dist/components/core/Modal/Modal.js +2 -7
  140. package/dist/components/core/Modal/Modal.theme.js +4 -8
  141. package/dist/components/core/Modal/Modal.types.d.ts +0 -10
  142. package/dist/components/core/Modal/index.d.ts +1 -1
  143. package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
  144. package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
  145. package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
  146. package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
  147. package/dist/components/core/NavItem/NavItem.js +20 -4
  148. package/dist/components/core/NavItem/NavItem.theme.js +13 -2
  149. package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
  150. package/dist/components/core/Popover/Popover.theme.js +1 -1
  151. package/dist/components/core/Popover/Popover.types.d.ts +6 -2
  152. package/dist/components/core/Popover/PopoverBody.js +10 -3
  153. package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
  154. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
  155. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
  156. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
  157. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
  158. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
  159. package/dist/components/core/Segmented/Segmented.theme.js +2 -2
  160. package/dist/components/core/Sidebar/Sidebar.d.ts +2 -0
  161. package/dist/components/core/Sidebar/Sidebar.js +15 -7
  162. package/dist/components/core/Sidebar/Sidebar.types.d.ts +92 -4
  163. package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
  164. package/dist/components/core/Sidebar/SidebarCard.js +68 -0
  165. package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
  166. package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
  167. package/dist/components/core/Sidebar/SidebarContent.js +5 -1
  168. package/dist/components/core/Sidebar/SidebarContext.js +1 -1
  169. package/dist/components/core/Sidebar/SidebarHeader.js +10 -2
  170. package/dist/components/core/Sidebar/SidebarLogo.js +38 -3
  171. package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
  172. package/dist/components/core/Sidebar/SidebarSearch.js +135 -0
  173. package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
  174. package/dist/components/core/Sidebar/SidebarUserProfile.js +2 -2
  175. package/dist/components/core/Sidebar/index.d.ts +3 -1
  176. package/dist/components/core/Tag/Tag.js +29 -5
  177. package/dist/components/core/Tag/Tag.theme.js +13 -8
  178. package/dist/components/core/Tag/Tag.types.d.ts +7 -0
  179. package/dist/components/core/Tooltip/Tooltip.js +1 -1
  180. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -2
  181. package/dist/components/core/index.d.ts +2 -0
  182. package/dist/components/core/index.js +6 -0
  183. package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
  184. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
  185. package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
  186. package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
  187. package/dist/components/data-display/Feed/Feed.js +28 -5
  188. package/dist/components/data-display/Feed/Feed.theme.js +1 -1
  189. package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
  190. package/dist/components/data-display/Feed/index.d.ts +1 -1
  191. package/dist/components/data-display/GanttChart/GanttChart.d.ts +1 -1
  192. package/dist/components/data-display/GanttChart/GanttChart.js +31 -4
  193. package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
  194. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +19 -0
  195. package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
  196. package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
  197. package/dist/components/data-display/GanttChart/GanttChartPanel.js +3 -3
  198. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +7 -4
  199. package/dist/components/data-display/GanttChart/GanttMilestone.js +5 -5
  200. package/dist/components/data-display/GanttChart/GanttTablePanel.js +1 -1
  201. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -2
  202. package/dist/components/data-display/GanttChart/GanttTaskBar.js +37 -16
  203. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
  204. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +35 -11
  205. package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -2
  206. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +3 -2
  207. package/dist/components/data-display/GanttChart/index.d.ts +1 -1
  208. package/dist/components/data-display/Metric/Metric.js +8 -8
  209. package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
  210. package/dist/components/data-display/Metric/Metric.theme.js +50 -68
  211. package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
  212. package/dist/components/data-display/Table/Table.js +2 -2
  213. package/dist/components/data-display/Table/Table.theme.js +27 -9
  214. package/dist/components/data-display/Table/Table.types.d.ts +8 -0
  215. package/dist/components/data-display/Table/TableBody.js +2 -2
  216. package/dist/components/data-display/Table/TableCell.js +1 -1
  217. package/dist/components/data-display/Table/TableRow.d.ts +1 -1
  218. package/dist/components/data-display/Table/TableRow.js +9 -2
  219. package/dist/components/data-display/Timeline/Timeline.js +27 -5
  220. package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
  221. package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
  222. package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
  223. package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
  224. package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
  225. package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
  226. package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
  227. package/dist/components/data-display/Timeline/index.d.ts +2 -2
  228. package/dist/components/effects/3d/index.d.ts +0 -2
  229. package/dist/components/effects/3d/index.js +0 -1
  230. package/dist/components/effects/Aurora/Aurora.d.ts +6 -17
  231. package/dist/components/effects/Aurora/Aurora.js +297 -131
  232. package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
  233. package/dist/components/effects/DotPattern/DotPattern.js +1 -1
  234. package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
  235. package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
  236. package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
  237. package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
  238. package/dist/components/effects/Preloader/Preloader.js +119 -0
  239. package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
  240. package/dist/components/effects/Preloader/index.d.ts +2 -0
  241. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
  242. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
  243. package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
  244. package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
  245. package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
  246. package/dist/components/effects/TiltCard/TiltCard.js +177 -0
  247. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
  248. package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
  249. package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
  250. package/dist/components/effects/TiltCard/index.d.ts +2 -0
  251. package/dist/components/effects/index.d.ts +4 -12
  252. package/dist/components/effects/index.js +2 -6
  253. package/dist/components/forms/Checkbox/Checkbox.js +7 -1
  254. package/dist/components/forms/Combobox/Combobox.js +1 -1
  255. package/dist/components/forms/Combobox/Combobox.theme.js +2 -4
  256. package/dist/components/forms/DatePicker/DatePicker.theme.js +11 -18
  257. package/dist/components/forms/DatePicker/DatePickerTrigger.js +1 -1
  258. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +6 -13
  259. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +1 -1
  260. package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
  261. package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
  262. package/dist/components/forms/FileUpload/FileUpload.js +85 -134
  263. package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
  264. package/dist/components/forms/FileUpload/FileUpload.theme.js +16 -30
  265. package/dist/components/forms/FileUpload/FileUpload.types.d.ts +26 -10
  266. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  267. package/dist/components/forms/Input/Input.theme.js +13 -10
  268. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  269. package/dist/components/forms/Mention/Mention.js +152 -57
  270. package/dist/components/forms/Mention/Mention.theme.js +16 -23
  271. package/dist/components/forms/Mention/Mention.types.d.ts +12 -12
  272. package/dist/components/forms/Mention/Mention.utils.js +32 -4
  273. package/dist/components/forms/RichTextEditor/RichTextEditor.js +3 -3
  274. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +5 -5
  275. package/dist/components/forms/Select/Select.js +2 -2
  276. package/dist/components/forms/Select/Select.theme.js +3 -3
  277. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  278. package/dist/components/forms/Switch/Switch.js +27 -15
  279. package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
  280. package/dist/components/forms/Switch/Switch.theme.js +33 -4
  281. package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
  282. package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
  283. package/dist/components/forms/TimePicker/TimePickerContent.js +1 -87
  284. package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
  285. package/dist/components/forms/forms.theme.js +21 -16
  286. package/dist/components/forms/index.d.ts +0 -4
  287. package/dist/components/forms/index.js +0 -89
  288. package/dist/components/generative/GenerativeView.d.ts +21 -0
  289. package/dist/components/generative/GenerativeView.js +116 -0
  290. package/dist/components/generative/actions.d.ts +26 -0
  291. package/dist/components/generative/actions.js +51 -0
  292. package/dist/components/generative/index.d.ts +11 -0
  293. package/dist/components/generative/index.js +9 -0
  294. package/dist/components/generative/registry.d.ts +43 -0
  295. package/dist/components/generative/registry.js +114 -0
  296. package/dist/components/generative/resolvers.d.ts +35 -0
  297. package/dist/components/generative/resolvers.js +93 -0
  298. package/dist/components/generative/schema.generated.d.ts +2 -0
  299. package/dist/components/generative/schema.generated.js +1639 -0
  300. package/dist/components/generative/schemaTypes.d.ts +30 -0
  301. package/dist/components/generative/streaming.d.ts +39 -0
  302. package/dist/components/generative/streaming.js +283 -0
  303. package/dist/components/generative/tools.d.ts +21 -0
  304. package/dist/components/generative/tools.js +54 -0
  305. package/dist/components/generative/types.d.ts +41 -0
  306. package/dist/components/generative/useGenerativeStream.d.ts +37 -0
  307. package/dist/components/generative/useGenerativeStream.js +36 -0
  308. package/dist/components/generative/validate.d.ts +24 -0
  309. package/dist/components/generative/validate.js +259 -0
  310. package/dist/components/layout/AppShell/AppShell.d.ts +10 -0
  311. package/dist/components/layout/AppShell/AppShell.js +84 -0
  312. package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
  313. package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
  314. package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
  315. package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
  316. package/dist/components/layout/AppShell/AppShellContext.js +19 -0
  317. package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
  318. package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
  319. package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
  320. package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
  321. package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
  322. package/dist/components/layout/AppShell/AppShellMain.js +19 -0
  323. package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
  324. package/dist/components/layout/AppShell/AppShellRightPanel.js +16 -0
  325. package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
  326. package/dist/components/layout/AppShell/AppShellSidebar.js +16 -0
  327. package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
  328. package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
  329. package/dist/components/layout/AppShell/index.d.ts +3 -0
  330. package/dist/components/layout/FormLayout/FormLayout.js +1 -87
  331. package/dist/components/layout/Grid/Grid.d.ts +3 -0
  332. package/dist/components/layout/Grid/Grid.js +50 -0
  333. package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
  334. package/dist/components/layout/Grid/Grid.theme.js +35 -0
  335. package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
  336. package/dist/components/layout/Grid/index.d.ts +3 -0
  337. package/dist/components/layout/Section/Section.d.ts +3 -0
  338. package/dist/components/layout/Section/Section.js +18 -0
  339. package/dist/components/layout/Section/Section.theme.d.ts +2 -0
  340. package/dist/components/layout/Section/Section.theme.js +10 -0
  341. package/dist/components/layout/Section/Section.types.d.ts +34 -0
  342. package/dist/components/layout/Section/index.d.ts +3 -0
  343. package/dist/components/layout/Stack/Stack.d.ts +3 -0
  344. package/dist/components/layout/Stack/Stack.js +19 -0
  345. package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
  346. package/dist/components/layout/Stack/Stack.theme.js +10 -0
  347. package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
  348. package/dist/components/layout/Stack/index.d.ts +3 -0
  349. package/dist/components/layout/index.d.ts +4 -0
  350. package/dist/components/layout/index.js +8 -0
  351. package/dist/generative.schema.json +1637 -0
  352. package/dist/hooks/useSelectPortal.d.ts +10 -2
  353. package/dist/hooks/useSelectPortal.js +45 -24
  354. package/dist/index.js +180 -174
  355. package/dist/registry.json +10205 -0
  356. package/dist/styles.css +1 -1
  357. package/dist/tools.json +1731 -0
  358. package/dist/utils/dateUtils.js +11 -1
  359. package/package.json +19 -4
  360. package/src/global.scss +82 -109
  361. package/src/styles/theme.css +707 -474
  362. package/dist/bg/1.jpg +0 -0
  363. package/dist/bg/10.jpg +0 -0
  364. package/dist/bg/11.jpg +0 -0
  365. package/dist/bg/14.jpg +0 -0
  366. package/dist/bg/15.jpg +0 -0
  367. package/dist/bg/16.jpg +0 -0
  368. package/dist/bg/17.jpg +0 -0
  369. package/dist/bg/18.jpg +0 -0
  370. package/dist/bg/19.jpg +0 -0
  371. package/dist/bg/2.jpg +0 -0
  372. package/dist/bg/20.jpg +0 -0
  373. package/dist/bg/21.jpg +0 -0
  374. package/dist/bg/22.jpg +0 -0
  375. package/dist/bg/23.jpg +0 -0
  376. package/dist/bg/24.jpg +0 -0
  377. package/dist/bg/3.jpg +0 -0
  378. package/dist/bg/4.jpg +0 -0
  379. package/dist/bg/5.jpg +0 -0
  380. package/dist/bg/6.jpg +0 -0
  381. package/dist/bg/7.jpg +0 -0
  382. package/dist/bg/8.jpg +0 -0
  383. package/dist/bg/9.jpg +0 -0
  384. package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
  385. package/dist/components/effects/MorphingText/MorphingText.js +0 -125
  386. package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
  387. package/dist/components/effects/MorphingText/index.d.ts +0 -2
  388. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
  389. package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
  390. package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
  391. package/dist/components/effects/PageTransition/PageTransition.js +0 -82
  392. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
  393. package/dist/components/effects/PageTransition/index.d.ts +0 -2
  394. package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
  395. package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
  396. package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
  397. package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
  398. package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
  399. package/dist/components/effects/Spotlight/Spotlight.js +0 -112
  400. package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
  401. package/dist/components/effects/Spotlight/index.d.ts +0 -2
  402. package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
  403. package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
  404. package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
  405. package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
  406. package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
  407. package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
  408. package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
  409. package/dist/components/effects/StickyScroll/index.d.ts +0 -2
  410. package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
  411. package/dist/components/forms/CronInput/CronInput.js +0 -113
  412. package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
  413. package/dist/components/forms/CronInput/CronInput.theme.js +0 -84
  414. package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
  415. package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
  416. package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
  417. package/dist/components/forms/CronInput/index.d.ts +0 -4
  418. /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
@@ -0,0 +1,150 @@
1
+ const CURTAIN_EASE = [0.76, 0, 0.24, 1];
2
+ const exitTransition = (duration, delay = 0) => ({
3
+ duration,
4
+ ease: CURTAIN_EASE,
5
+ delay,
6
+ });
7
+ const exitMap = {
8
+ up: { y: '-100%', x: 0 },
9
+ down: { y: '100%', x: 0 },
10
+ left: { x: '-100%', y: 0 },
11
+ right: { x: '100%', y: 0 },
12
+ };
13
+ const buildCurtainVariants = (direction, duration) => ({
14
+ covered: { y: 0, x: 0 },
15
+ exit: {
16
+ ...exitMap[direction],
17
+ transition: exitTransition(duration),
18
+ },
19
+ });
20
+ // Logo is rendered INSIDE the curtain. These are relative offsets that
21
+ // counteract ~30% of the curtain's motion, making the logo appear to
22
+ // move at ~70% of the curtain's speed (parallax lag effect). It also
23
+ // fades out so the mark dissolves while lagging instead of riding the
24
+ // curtain edge off-screen.
25
+ const logoInnerOffsetMap = {
26
+ up: { y: '30vh', x: 0 },
27
+ down: { y: '-30vh', x: 0 },
28
+ left: { x: '30vw', y: 0 },
29
+ right: { x: '-30vw', y: 0 },
30
+ };
31
+ const buildLogoParallaxVariants = (direction, duration) => ({
32
+ covered: { y: 0, x: 0, opacity: 1 },
33
+ exit: {
34
+ ...logoInnerOffsetMap[direction],
35
+ opacity: 0,
36
+ transition: exitTransition(duration),
37
+ },
38
+ });
39
+ // Plain fade-out for logos that don't translate on their own: every
40
+ // non-slide type renders the logo in a static centered layer over the
41
+ // panels, so it must fade or it would linger over the revealed page.
42
+ // Slightly faster than the panels so the mark is gone before the
43
+ // reveal completes.
44
+ const buildLogoFadeVariants = (duration) => ({
45
+ covered: { opacity: 1 },
46
+ exit: {
47
+ opacity: 0,
48
+ transition: { duration: duration * 0.5, ease: CURTAIN_EASE },
49
+ },
50
+ });
51
+ // Strips travel slightly past their own span so sub-pixel rounding never
52
+ // leaves a hairline of curtain at the edge.
53
+ const STRIP_EXIT = 102;
54
+ const buildStripDescriptors = ({ type, direction, duration, panels, stagger, }) => {
55
+ // Strips orient perpendicular to the exit axis: up/down → vertical strips
56
+ // translating Y; left/right → horizontal strips translating X.
57
+ const axis = direction === 'left' || direction === 'right' ? 'x' : 'y';
58
+ const sign = direction === 'up' || direction === 'left' ? -1 : 1;
59
+ const size = 100 / panels;
60
+ return Array.from({ length: panels }, (_, i) => {
61
+ // +0.4% overlap so adjacent strips never show a seam between them
62
+ const span = `${size + (i < panels - 1 ? 0.4 : 0)}%`;
63
+ const offset = `${i * size}%`;
64
+ const panelSign = type === 'shutters' && i % 2 === 1 ? -sign : sign;
65
+ return {
66
+ key: `strip-${i}`,
67
+ style: axis === 'y'
68
+ ? { top: 0, bottom: 0, left: offset, width: span, willChange: 'transform' }
69
+ : { left: 0, right: 0, top: offset, height: span, willChange: 'transform' },
70
+ variants: {
71
+ covered: { x: 0, y: 0 },
72
+ exit: {
73
+ [axis]: `${panelSign * STRIP_EXIT}%`,
74
+ transition: exitTransition(duration, i * stagger),
75
+ },
76
+ },
77
+ };
78
+ });
79
+ };
80
+ const buildLayerDescriptors = ({ direction, duration, panels, stagger, color, }) => {
81
+ const base = color !== null && color !== void 0 ? color : 'var(--color-primary)';
82
+ return Array.from({ length: panels }, (_, i) => ({
83
+ key: `layer-${i}`,
84
+ // First-leaving layer sits on top; deeper layers get progressively lighter
85
+ style: { inset: 0, zIndex: panels - i, willChange: 'transform' },
86
+ backgroundColor: i === 0 ? color : `color-mix(in oklab, ${base}, white ${Math.min(i * 30, 75)}%)`,
87
+ variants: {
88
+ covered: { x: 0, y: 0 },
89
+ exit: {
90
+ ...exitMap[direction],
91
+ transition: exitTransition(duration, i * stagger),
92
+ },
93
+ },
94
+ }));
95
+ };
96
+ const buildSplitDescriptors = ({ direction, duration, }) => {
97
+ const make = (key, place, exit) => ({
98
+ key,
99
+ style: { ...place, willChange: 'transform' },
100
+ variants: {
101
+ covered: {},
102
+ exit: { ...exit, transition: exitTransition(duration) },
103
+ },
104
+ });
105
+ return direction === 'up' || direction === 'down'
106
+ ? [
107
+ make('split-1', { top: 0, left: 0, right: 0, height: '50%' }, { y: '-100%' }),
108
+ make('split-2', { bottom: 0, left: 0, right: 0, height: '50%' }, { y: '100%' }),
109
+ ]
110
+ : [
111
+ make('split-1', { top: 0, bottom: 0, left: 0, width: '50%' }, { x: '-100%' }),
112
+ make('split-2', { top: 0, bottom: 0, right: 0, width: '50%' }, { x: '100%' }),
113
+ ];
114
+ };
115
+ const buildPanelDescriptors = (opts) => {
116
+ switch (opts.type) {
117
+ case 'blinds':
118
+ case 'shutters':
119
+ return buildStripDescriptors(opts);
120
+ case 'layers':
121
+ return buildLayerDescriptors(opts);
122
+ case 'iris':
123
+ return [
124
+ {
125
+ key: 'iris',
126
+ style: { inset: 0 },
127
+ variants: {
128
+ covered: { clipPath: 'circle(125% at 50% 50%)' },
129
+ exit: {
130
+ clipPath: 'circle(0% at 50% 50%)',
131
+ transition: exitTransition(opts.duration),
132
+ },
133
+ },
134
+ },
135
+ ];
136
+ case 'split':
137
+ return buildSplitDescriptors(opts);
138
+ case 'slide':
139
+ default:
140
+ return [
141
+ {
142
+ key: 'curtain',
143
+ style: { inset: 0, willChange: 'transform' },
144
+ variants: buildCurtainVariants(opts.direction, opts.duration),
145
+ },
146
+ ];
147
+ }
148
+ };
149
+
150
+ export { CURTAIN_EASE, buildCurtainVariants, buildLogoFadeVariants, buildLogoParallaxVariants, buildPanelDescriptors };
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { PreloaderProps } from "./Preloader.types";
3
+ export declare const Preloader: React.FC<PreloaderProps>;
@@ -0,0 +1,119 @@
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
+ import { useState, useRef, useEffect } from 'react';
3
+ import { useReducedMotion, motion } from 'motion/react';
4
+ import { cn } from '../../../utils/cn.js';
5
+ import { buildPanelDescriptors, buildLogoParallaxVariants, buildLogoFadeVariants } from './Preloader.animations.js';
6
+
7
+ const DEFAULT_COLOR_CLASS = "bg-[var(--color-primary)]";
8
+ const PANEL_DEFAULTS = {
9
+ blinds: 5,
10
+ shutters: 4,
11
+ layers: 3,
12
+ };
13
+ const STAGGER_DEFAULTS = {
14
+ blinds: 0.08,
15
+ shutters: 0.08,
16
+ layers: 0.14,
17
+ };
18
+ const Preloader = ({ children, logo, type = "slide", direction = "up", duration = 0.8, delay = 0.8, color, className, parallax = true, contained = false, panels, stagger, onStart, onComplete, }) => {
19
+ var _a, _b;
20
+ const [phase, setPhase] = useState("covered");
21
+ const [completedPanels, setCompletedPanels] = useState(0);
22
+ const shouldReduceMotion = useReducedMotion();
23
+ const isMultiPanel = type === "blinds" || type === "shutters" || type === "layers";
24
+ let panelCount = (_a = PANEL_DEFAULTS[type]) !== null && _a !== void 0 ? _a : (type === "split" ? 2 : 1);
25
+ if (isMultiPanel && panels !== undefined) {
26
+ if (process.env.NODE_ENV !== "production" && (panels < 2 || panels > 12)) {
27
+ console.warn("[Preloader]: panels must be between 2 and 12; clamping.");
28
+ }
29
+ panelCount = Math.min(12, Math.max(2, Math.round(panels)));
30
+ }
31
+ const resolvedStagger = isMultiPanel ? (_b = stagger !== null && stagger !== void 0 ? stagger : STAGGER_DEFAULTS[type]) !== null && _b !== void 0 ? _b : 0 : 0;
32
+ // Stable refs for callbacks/reduced-motion to avoid stale closures without re-running the effect
33
+ const onStartRef = useRef(onStart);
34
+ const onCompleteRef = useRef(onComplete);
35
+ const reducedMotionRef = useRef(shouldReduceMotion);
36
+ // Guards against re-triggering the exit if the effect re-runs (e.g. `delay` change)
37
+ const startedRef = useRef(false);
38
+ useEffect(() => { onStartRef.current = onStart; }, [onStart]);
39
+ useEffect(() => { onCompleteRef.current = onComplete; }, [onComplete]);
40
+ useEffect(() => { reducedMotionRef.current = shouldReduceMotion; }, [shouldReduceMotion]);
41
+ useEffect(() => {
42
+ if (typeof window === "undefined" || typeof document === "undefined")
43
+ return;
44
+ let cancelled = false;
45
+ let delayTimer;
46
+ let loadListener;
47
+ const loadPromise = new Promise((resolve) => {
48
+ if (document.readyState === "complete") {
49
+ resolve();
50
+ }
51
+ else {
52
+ loadListener = () => resolve();
53
+ window.addEventListener("load", loadListener, { once: true });
54
+ }
55
+ });
56
+ const delayPromise = new Promise((resolve) => {
57
+ delayTimer = setTimeout(resolve, delay * 1000);
58
+ });
59
+ Promise.all([loadPromise, delayPromise]).then(() => {
60
+ var _a, _b;
61
+ if (cancelled || startedRef.current)
62
+ return;
63
+ startedRef.current = true;
64
+ if (reducedMotionRef.current) {
65
+ // Skip the animation entirely but keep the callback contract
66
+ (_a = onStartRef.current) === null || _a === void 0 ? void 0 : _a.call(onStartRef);
67
+ setPhase("done");
68
+ (_b = onCompleteRef.current) === null || _b === void 0 ? void 0 : _b.call(onCompleteRef);
69
+ }
70
+ else {
71
+ setPhase("exit");
72
+ }
73
+ });
74
+ return () => {
75
+ cancelled = true;
76
+ if (delayTimer !== undefined)
77
+ clearTimeout(delayTimer);
78
+ if (loadListener)
79
+ window.removeEventListener("load", loadListener);
80
+ };
81
+ }, [delay]);
82
+ useEffect(() => {
83
+ var _a;
84
+ if (completedPanels >= panelCount) {
85
+ setPhase("done");
86
+ (_a = onCompleteRef.current) === null || _a === void 0 ? void 0 : _a.call(onCompleteRef);
87
+ }
88
+ }, [completedPanels, panelCount]);
89
+ if (phase === "done") {
90
+ return jsx(Fragment, { children: children });
91
+ }
92
+ const positionClass = contained ? "absolute inset-0" : "fixed inset-0";
93
+ const descriptors = buildPanelDescriptors({
94
+ type,
95
+ direction,
96
+ duration,
97
+ panels: panelCount,
98
+ stagger: resolvedStagger,
99
+ color,
100
+ });
101
+ const handleExitStart = (def) => {
102
+ var _a;
103
+ if (def === "exit")
104
+ (_a = onStartRef.current) === null || _a === void 0 ? void 0 : _a.call(onStartRef);
105
+ };
106
+ // Slide carries its logo inside the curtain (parallax lag or plain fade);
107
+ // every other type renders it in the static centered layer below.
108
+ const slideLogoNode = type === "slide" && logo ? (parallax ? (jsx(motion.div, { className: "relative z-10 select-none", variants: buildLogoParallaxVariants(direction, duration), initial: "covered", animate: phase, children: logo })) : (jsx(motion.div, { className: "relative z-10 select-none", variants: buildLogoFadeVariants(duration), initial: "covered", animate: phase, children: logo }))) : null;
109
+ return (jsxs(Fragment, { children: [children, jsxs("div", { "aria-hidden": "true", className: cn(positionClass, "z-[9999] pointer-events-none"), children: [descriptors.map((d, i) => {
110
+ var _a;
111
+ const bg = (_a = d.backgroundColor) !== null && _a !== void 0 ? _a : color;
112
+ return (jsx(motion.div, { className: cn("absolute pointer-events-auto", type === "slide" && "flex items-center justify-center", !bg && DEFAULT_COLOR_CLASS, className), style: { ...d.style, ...(bg ? { backgroundColor: bg } : undefined) }, variants: d.variants, initial: "covered", animate: phase, onAnimationStart: i === 0 ? handleExitStart : undefined, onAnimationComplete: (def) => {
113
+ if (def === "exit")
114
+ setCompletedPanels((n) => n + 1);
115
+ }, children: slideLogoNode }, d.key));
116
+ }), type !== "slide" && logo && (jsx(motion.div, { className: "absolute inset-0 flex items-center justify-center select-none", style: { zIndex: 50 }, variants: buildLogoFadeVariants(duration), initial: "covered", animate: phase, children: logo }))] })] }));
117
+ };
118
+
119
+ export { Preloader };
@@ -0,0 +1,63 @@
1
+ export type PreloaderDirection = 'up' | 'down' | 'left' | 'right';
2
+ export type PreloaderType = 'slide' | 'split' | 'blinds' | 'shutters' | 'layers' | 'iris';
3
+ export interface PreloaderProps {
4
+ /** Page content revealed once the curtain exits. */
5
+ children: React.ReactNode;
6
+ /** Decorative mark centered on the curtain (hidden from assistive tech). */
7
+ logo?: React.ReactNode;
8
+ /**
9
+ * `slide` = one full curtain exits; `split` = two half panels part in
10
+ * opposite directions; `blinds` = staggered strips sweep the same way;
11
+ * `shutters` = strips alternate directions; `layers` = stacked curtains
12
+ * trail each other in lightening shades; `iris` = a circular mask closes
13
+ * on the curtain from the edges to the center.
14
+ */
15
+ type?: PreloaderType;
16
+ /**
17
+ * Exit direction. For `split`, `up`/`down` split along the horizontal seam
18
+ * and `left`/`right` along the vertical seam (the two are equivalent per axis).
19
+ * For `blinds`/`shutters`, strips orient perpendicular to the exit axis.
20
+ * Ignored by `iris` (always closes to center).
21
+ */
22
+ direction?: PreloaderDirection;
23
+ /**
24
+ * Exit animation duration in seconds (not ms), per panel. For staggered
25
+ * types the total exit time is `duration + (panels - 1) * stagger`.
26
+ */
27
+ duration?: number;
28
+ /**
29
+ * Minimum hold time in seconds (not ms). The curtain exits once BOTH the
30
+ * window `load` event has fired and this delay has elapsed.
31
+ */
32
+ delay?: number;
33
+ /**
34
+ * Curtain fill as a CSS color value (e.g. `"var(--color-primary-900)"`, `"#0a0a0a"`).
35
+ * Applied as an inline `background-color`, so it wins over `className`.
36
+ * When omitted, the curtain uses `bg-[var(--color-primary)]` as a class,
37
+ * which `className` background utilities can override.
38
+ */
39
+ color?: string;
40
+ className?: string;
41
+ /** Slide only: the logo lags behind the curtain for a depth effect. */
42
+ parallax?: boolean;
43
+ /**
44
+ * Position the overlay `absolute` within the nearest positioned ancestor
45
+ * instead of `fixed` to the viewport. Use when embedding the transition in
46
+ * a container (demos, hero sections) rather than covering the whole page.
47
+ */
48
+ contained?: boolean;
49
+ /**
50
+ * Strip/slat/layer count for `blinds` (default 5), `shutters` (default 4),
51
+ * and `layers` (default 3). Clamped to 2–12. Ignored by other types.
52
+ */
53
+ panels?: number;
54
+ /**
55
+ * Seconds between successive panels for `blinds`/`shutters` (default 0.08)
56
+ * and `layers` (default 0.14). Ignored by other types.
57
+ */
58
+ stagger?: number;
59
+ /** Fires when the exit animation starts (immediately if reduced motion is on). */
60
+ onStart?: () => void;
61
+ /** Fires once the reveal finishes; the overlay unmounts from the DOM. */
62
+ onComplete?: () => void;
63
+ }
@@ -0,0 +1,2 @@
1
+ export { Preloader } from './Preloader';
2
+ export type { PreloaderProps, PreloaderDirection, PreloaderType } from './Preloader.types';
@@ -24,27 +24,27 @@ const GRADIENT_DIRECTIONS = {
24
24
  */
25
25
  const BlurInstance = forwardRef(({ position, blurLevels, size, theme, className, style, ...rest }, ref) => {
26
26
  const isVertical = position === "top" || position === "bottom";
27
- const direction = GRADIENT_DIRECTIONS[position];
28
- const n = blurLevels.length;
29
- const containerStyle = {
30
- ...(isVertical ? { height: size } : { width: size }),
31
- ...style,
32
- };
33
- return (jsx("div", { ref: ref, className: cn(theme.baseStyle, theme.positions[position], className), style: containerStyle, ...rest, children: blurLevels.map((blur, i) => {
27
+ const layerStyles = useMemo(() => {
28
+ const direction = GRADIENT_DIRECTIONS[position];
29
+ const step = 100 / blurLevels.length;
30
+ return blurLevels.map((blur, i) => {
34
31
  // MagicUI mask formula: each layer has a 1-step fade-in, 1-step solid,
35
32
  // and 1-step fade-out. Adjacent layers overlap by 2 steps, creating
36
33
  // smooth transitions. Values beyond 100% are clamped by the browser.
37
- const step = 100 / n;
38
34
  const gradient = `linear-gradient(${direction}, transparent ${i * step}%, black ${(i + 1) * step}%, black ${(i + 2) * step}%, transparent ${(i + 3) * step}%)`;
39
- const layerStyle = {
35
+ return {
40
36
  maskImage: gradient,
41
37
  WebkitMaskImage: gradient,
42
38
  backdropFilter: `blur(${blur}px)`,
43
39
  WebkitBackdropFilter: `blur(${blur}px)`,
44
- zIndex: i + 1,
45
40
  };
46
- return (jsx("div", { className: theme.layerStyle, style: layerStyle }, i));
47
- }) }));
41
+ });
42
+ }, [position, blurLevels]);
43
+ const containerStyle = {
44
+ ...(isVertical ? { height: size } : { width: size }),
45
+ ...style,
46
+ };
47
+ return (jsx("div", { ref: ref, "aria-hidden": "true", className: cn(theme.baseStyle, theme.positions[position], className), style: containerStyle, ...rest, children: layerStyles.map((layerStyle, i) => (jsx("div", { className: theme.layerStyle, style: layerStyle }, i))) }));
48
48
  });
49
49
  BlurInstance.displayName = "BlurInstance";
50
50
  const ProgressiveBlur = forwardRef(({ position = "bottom", blurLevels: blurLevelsProp, layers = DEFAULT_LAYERS, blurIntensity = DEFAULT_MAX_BLUR, size = DEFAULT_SIZE, className, theme: themeOverrides, ...rest }, ref) => {
@@ -59,10 +59,21 @@ const ProgressiveBlur = forwardRef(({ position = "bottom", blurLevels: blurLevel
59
59
  layerStyle: (_b = themeOverrides === null || themeOverrides === void 0 ? void 0 : themeOverrides.layerStyle) !== null && _b !== void 0 ? _b : progressiveBlurTheme.layerStyle,
60
60
  });
61
61
  }, [themeOverrides]);
62
- const blurLevels = useMemo(() => blurLevelsProp !== null && blurLevelsProp !== void 0 ? blurLevelsProp : generateBlurLevels(layers, blurIntensity), [blurLevelsProp, layers, blurIntensity]);
62
+ const blurLevels = useMemo(() => {
63
+ if (blurLevelsProp)
64
+ return blurLevelsProp;
65
+ const count = Math.max(1, Math.floor(layers));
66
+ if (process.env.NODE_ENV !== "production" && count !== layers) {
67
+ console.warn(`[ProgressiveBlur]: \`layers\` must be a positive integer; received ${layers}, using ${count}.`);
68
+ }
69
+ return generateBlurLevels(count, blurIntensity);
70
+ }, [blurLevelsProp, layers, blurIntensity]);
63
71
  const positions = Array.isArray(position)
64
- ? position
72
+ ? Array.from(new Set(position))
65
73
  : [position];
74
+ if (process.env.NODE_ENV !== "production" && ref && positions.length > 1) {
75
+ console.warn("[ProgressiveBlur]: `ref` is ignored when `position` is an array — render one ProgressiveBlur per position if you need element refs.");
76
+ }
66
77
  // Single position — render directly, forward ref and remaining props
67
78
  if (positions.length === 1) {
68
79
  return (jsx(BlurInstance, { ref: ref, position: positions[0], blurLevels: blurLevels, size: size, theme: theme, className: className, ...rest }));
@@ -4,6 +4,8 @@ export interface ProgressiveBlurProps extends React.HTMLAttributes<HTMLDivElemen
4
4
  /**
5
5
  * Position(s) where the blur effect should be applied.
6
6
  * Can be a single position or array of positions.
7
+ * With an array, one element renders per position, so `ref` is not
8
+ * forwarded and `id`/event props apply to every instance.
7
9
  * @default "bottom"
8
10
  */
9
11
  position?: ProgressiveBlurPosition | ProgressiveBlurPosition[];
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import type { TiltCardProps } from "./TiltCard.types";
3
+ /**
4
+ * TiltCard wraps content in a damped 3D mouse tilt. The tilt is a pure CSS
5
+ * transform — no WebGL. The optional `glow` spotlight border lazy-loads the
6
+ * `three` peer dependency on demand (see TiltCard.glow.ts).
7
+ *
8
+ * The animation loop is demand-driven: it runs only while the pointer is near
9
+ * the card or the damped values are still settling, then stops — an idle
10
+ * TiltCard costs nothing per frame.
11
+ */
12
+ export declare const TiltCard: React.FC<TiltCardProps>;
@@ -0,0 +1,28 @@
1
+ import { type TiltCardVariation } from "./TiltCard.types";
2
+ /**
3
+ * WebGL spotlight-border renderer for TiltCard. Kept in its own module so the
4
+ * `three` optional peer dependency is only loaded (dynamic import) when a
5
+ * TiltCard actually enables `glow` — tilt-only cards never touch WebGL.
6
+ */
7
+ export interface GlowParams {
8
+ glowColor: string;
9
+ spotlightSize: number;
10
+ spotlightEdge: number;
11
+ glowIntensity: number;
12
+ borderWidth: number;
13
+ }
14
+ export interface GlowEffect {
15
+ /** Render one frame with the damped mouse position (content-local px). */
16
+ render(mouseX: number, mouseY: number): void;
17
+ /** Re-measure the content box and update sizes/uniforms. */
18
+ resize(): void;
19
+ setParams(params: GlowParams): void;
20
+ dispose(): void;
21
+ }
22
+ export declare function createGlowEffect(opts: {
23
+ host: HTMLElement;
24
+ content: HTMLElement;
25
+ variation: TiltCardVariation;
26
+ glowExtent: number;
27
+ rounded?: string;
28
+ }): GlowEffect;
@@ -0,0 +1,114 @@
1
+ import * as THREE from 'three';
2
+ import { fragmentShader, vertexShader } from './TiltCard.shaders.js';
3
+ import { variationMap } from './TiltCard.types.js';
4
+
5
+ function createGlowEffect(opts) {
6
+ var _a;
7
+ const { host, content, variation, glowExtent, rounded } = opts;
8
+ const scene = new THREE.Scene();
9
+ const camera = new THREE.OrthographicCamera();
10
+ camera.position.z = 1;
11
+ const renderer = new THREE.WebGLRenderer({ alpha: true });
12
+ renderer.setClearColor(0x000000, 0);
13
+ const canvas = renderer.domElement;
14
+ canvas.style.position = "absolute";
15
+ canvas.style.pointerEvents = "none";
16
+ canvas.style.zIndex = "10";
17
+ host.appendChild(canvas);
18
+ const geo = new THREE.PlaneGeometry(1, 1);
19
+ const material = new THREE.ShaderMaterial({
20
+ vertexShader,
21
+ fragmentShader,
22
+ uniforms: {
23
+ u_mouse: { value: new THREE.Vector2(-1e4, -1e4) },
24
+ u_resolution: { value: new THREE.Vector2() },
25
+ u_contentResolution: { value: new THREE.Vector2() },
26
+ u_offset: { value: new THREE.Vector2() },
27
+ u_pixelRatio: { value: 1 },
28
+ u_color: { value: new THREE.Color("#ffffff") },
29
+ u_shapeSize: { value: 1.0 },
30
+ u_roundness: { value: 0.0 },
31
+ u_borderSize: { value: 0.0 },
32
+ u_spotlightSize: { value: 0.4 },
33
+ u_spotlightEdge: { value: 0.5 },
34
+ u_glowIntensity: { value: 0.6 },
35
+ },
36
+ defines: { VAR: (_a = variationMap[variation]) !== null && _a !== void 0 ? _a : 0 },
37
+ transparent: true,
38
+ });
39
+ const quad = new THREE.Mesh(geo, material);
40
+ scene.add(quad);
41
+ let borderWidthPx = 2;
42
+ let contextLost = false;
43
+ const onContextLost = (e) => {
44
+ e.preventDefault();
45
+ contextLost = true;
46
+ };
47
+ const onContextRestored = () => {
48
+ contextLost = false;
49
+ resize();
50
+ };
51
+ canvas.addEventListener("webglcontextlost", onContextLost);
52
+ canvas.addEventListener("webglcontextrestored", onContextRestored);
53
+ const resize = () => {
54
+ var _a;
55
+ const w = content.clientWidth;
56
+ const h = content.clientHeight;
57
+ if (w === 0 || h === 0)
58
+ return;
59
+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
60
+ const canvasW = w + glowExtent * 2;
61
+ const canvasH = h + glowExtent * 2;
62
+ renderer.setSize(canvasW, canvasH);
63
+ renderer.setPixelRatio(dpr);
64
+ canvas.style.top = `-${glowExtent}px`;
65
+ canvas.style.left = `-${glowExtent}px`;
66
+ canvas.style.width = `${canvasW}px`;
67
+ canvas.style.height = `${canvasH}px`;
68
+ camera.left = -canvasW / 2;
69
+ camera.right = canvasW / 2;
70
+ camera.top = canvasH / 2;
71
+ camera.bottom = -canvasH / 2;
72
+ camera.updateProjectionMatrix();
73
+ quad.scale.set(canvasW, canvasH, 1);
74
+ material.uniforms.u_resolution.value.set(canvasW, canvasH).multiplyScalar(dpr);
75
+ material.uniforms.u_contentResolution.value.set(w, h).multiplyScalar(dpr);
76
+ material.uniforms.u_offset.value.set(glowExtent, glowExtent).multiplyScalar(dpr);
77
+ material.uniforms.u_pixelRatio.value = dpr;
78
+ const shortestDim = Math.min(w, h);
79
+ const radiusSource = rounded ? host : ((_a = content.firstElementChild) !== null && _a !== void 0 ? _a : host);
80
+ const radiusPx = parseFloat(getComputedStyle(radiusSource).borderRadius) || 0;
81
+ material.uniforms.u_roundness.value = Math.min((radiusPx / shortestDim) * 2, 1);
82
+ material.uniforms.u_borderSize.value = borderWidthPx / shortestDim;
83
+ };
84
+ return {
85
+ render(mouseX, mouseY) {
86
+ if (contextLost)
87
+ return;
88
+ material.uniforms.u_mouse.value.set(mouseX, mouseY);
89
+ renderer.render(scene, camera);
90
+ },
91
+ resize,
92
+ setParams({ glowColor, spotlightSize, spotlightEdge, glowIntensity, borderWidth }) {
93
+ material.uniforms.u_color.value.set(glowColor);
94
+ material.uniforms.u_spotlightSize.value = spotlightSize;
95
+ material.uniforms.u_spotlightEdge.value = spotlightEdge;
96
+ material.uniforms.u_glowIntensity.value = glowIntensity;
97
+ borderWidthPx = borderWidth;
98
+ const shortestDim = Math.min(content.clientWidth, content.clientHeight);
99
+ if (shortestDim > 0)
100
+ material.uniforms.u_borderSize.value = borderWidthPx / shortestDim;
101
+ },
102
+ dispose() {
103
+ canvas.removeEventListener("webglcontextlost", onContextLost);
104
+ canvas.removeEventListener("webglcontextrestored", onContextRestored);
105
+ if (host.contains(canvas))
106
+ host.removeChild(canvas);
107
+ renderer.dispose();
108
+ geo.dispose();
109
+ material.dispose();
110
+ },
111
+ };
112
+ }
113
+
114
+ export { createGlowEffect };