@flikk/ui 1.0.0-beta.13 → 1.0.0-beta.15

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 (283) hide show
  1. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
  2. package/dist/components/ai/PromptInput/PromptInput.js +4 -2
  3. package/dist/components/ai/PromptInput/VoiceRecorder.js +1 -1
  4. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +4 -4
  5. package/dist/components/ai/StreamingResponse/StreamingResponse.js +6 -0
  6. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.js +3 -14
  7. package/dist/components/ai/index.d.ts +0 -5
  8. package/dist/components/ai/index.js +8 -4
  9. package/dist/components/charts/DonutChart/DonutChart.js +1 -1
  10. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
  11. package/dist/components/charts/FunnelChart/FunnelChart.js +2 -2
  12. package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +13 -1
  13. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
  14. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.types.d.ts +13 -2
  15. package/dist/components/core/Accordion/AccordionItem.js +1 -1
  16. package/dist/components/core/Accordion/AccordionTrigger.js +1 -1
  17. package/dist/components/core/Alert/Alert.animations.d.ts +11 -0
  18. package/dist/components/core/Alert/Alert.animations.js +44 -0
  19. package/dist/components/core/Alert/Alert.js +16 -3
  20. package/dist/components/core/Avatar/Avatar.js +12 -7
  21. package/dist/components/core/Avatar/Avatar.theme.d.ts +4 -6
  22. package/dist/components/core/Avatar/Avatar.theme.js +22 -12
  23. package/dist/components/core/Avatar/Avatar.types.d.ts +9 -0
  24. package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +2 -2
  25. package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -2
  26. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  27. package/dist/components/core/Badge/Badge.animations.js +1 -1
  28. package/dist/components/core/Badge/Badge.js +26 -50
  29. package/dist/components/core/Badge/Badge.theme.js +49 -63
  30. package/dist/components/core/Badge/Badge.types.d.ts +6 -30
  31. package/dist/components/core/Button/Button.js +2 -2
  32. package/dist/components/core/Button/Button.ripple.js +1 -1
  33. package/dist/components/core/Button/Button.theme.d.ts +1 -1
  34. package/dist/components/core/Button/Button.theme.js +5 -5
  35. package/dist/components/core/Button/Button.types.d.ts +1 -1
  36. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +6 -6
  37. package/dist/components/core/ButtonGroup/ButtonGroupText.js +1 -3
  38. package/dist/components/core/Calendar/Calendar.js +29 -3
  39. package/dist/components/core/Calendar/Calendar.theme.js +11 -7
  40. package/dist/components/core/Calendar/Calendar.types.d.ts +3 -0
  41. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +2 -2
  42. package/dist/components/core/Carousel/CarouselBody.js +0 -1
  43. package/dist/components/core/CommandPalette/CommandItem.js +1 -1
  44. package/dist/components/core/CommandPalette/CommandPalette.js +6 -4
  45. package/dist/components/core/CommandPalette/CommandPalette.theme.js +1 -0
  46. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +6 -0
  47. package/dist/components/core/ContextMenu/ContextMenu.js +5 -4
  48. package/dist/components/core/ContextMenu/ContextMenuTrigger.js +5 -6
  49. package/dist/components/core/Drawer/Drawer.d.ts +1 -1
  50. package/dist/components/core/Drawer/Drawer.js +25 -2
  51. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  52. package/dist/components/core/Drawer/Drawer.types.d.ts +6 -0
  53. package/dist/components/core/Drawer/DrawerHeader.js +1 -1
  54. package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
  55. package/dist/components/core/Dropdown/Dropdown.js +5 -1
  56. package/dist/components/core/Dropdown/Dropdown.types.d.ts +1 -0
  57. package/dist/components/core/Dropdown/DropdownItem.js +1 -1
  58. package/dist/components/core/Dropdown/DropdownMenu.js +4 -4
  59. package/dist/components/core/Dropdown/DropdownSection.js +1 -1
  60. package/dist/components/core/Dropdown/DropdownSeparator.js +1 -1
  61. package/dist/components/core/Dropdown/DropdownTrigger.d.ts +6 -1
  62. package/dist/components/core/Dropdown/DropdownTrigger.js +10 -8
  63. package/dist/components/core/Kbd/Kbd.theme.js +3 -3
  64. package/dist/components/core/Link/Link.js +4 -2
  65. package/dist/components/core/Message/Message.d.ts +9 -0
  66. package/dist/components/core/Message/Message.js +44 -3
  67. package/dist/components/core/Message/Message.theme.js +22 -0
  68. package/dist/components/core/Message/Message.types.d.ts +115 -0
  69. package/dist/components/core/Message/MessageAudio.d.ts +8 -0
  70. package/dist/components/core/Message/MessageAudio.js +11 -0
  71. package/dist/components/core/Message/MessageContext.d.ts +3 -1
  72. package/dist/components/core/Message/MessageDateDivider.d.ts +6 -0
  73. package/dist/components/core/Message/MessageDateDivider.js +10 -0
  74. package/dist/components/core/Message/MessageFile.d.ts +9 -0
  75. package/dist/components/core/Message/MessageFile.js +15 -0
  76. package/dist/components/core/Message/MessageImage.d.ts +11 -0
  77. package/dist/components/core/Message/MessageImage.js +13 -0
  78. package/dist/components/core/Message/MessageLink.d.ts +10 -0
  79. package/dist/components/core/Message/MessageLink.js +15 -0
  80. package/dist/components/core/Message/MessageReactions.d.ts +8 -0
  81. package/dist/components/core/Message/MessageReactions.js +12 -0
  82. package/dist/components/core/Message/MessageReply.d.ts +8 -0
  83. package/dist/components/core/Message/MessageReply.js +10 -0
  84. package/dist/components/core/Message/MessageSenderName.d.ts +6 -0
  85. package/dist/components/core/Message/MessageSenderName.js +10 -0
  86. package/dist/components/core/Message/MessageStatusIndicator.d.ts +9 -0
  87. package/dist/components/core/Message/MessageStatusIndicator.js +45 -0
  88. package/dist/components/core/Message/index.d.ts +19 -1
  89. package/dist/components/core/Modal/Modal.animations.d.ts +1 -0
  90. package/dist/components/core/Modal/Modal.animations.js +14 -11
  91. package/dist/components/core/Modal/ModalHeader.js +1 -1
  92. package/dist/components/core/NavItem/NavItem.js +100 -52
  93. package/dist/components/core/NavItem/NavItem.theme.js +6 -3
  94. package/dist/components/core/NavItem/NavItem.types.d.ts +44 -30
  95. package/dist/components/core/NavItem/index.d.ts +1 -1
  96. package/dist/components/core/Pagination/Pagination.theme.js +1 -1
  97. package/dist/components/core/Pill/Pill.theme.js +1 -1
  98. package/dist/components/core/Popover/Popover.d.ts +1 -1
  99. package/dist/components/core/Popover/PopoverBody.js +2 -2
  100. package/dist/components/core/Popover/PopoverTrigger.d.ts +1 -1
  101. package/dist/components/core/Popover/PopoverTrigger.js +11 -11
  102. package/dist/components/core/Progress/Progress.d.ts +9 -8
  103. package/dist/components/core/Progress/Progress.js +16 -16
  104. package/dist/components/core/Progress/Progress.theme.js +5 -16
  105. package/dist/components/core/Progress/Progress.types.d.ts +2 -20
  106. package/dist/components/core/Progress/index.d.ts +1 -1
  107. package/dist/components/core/ScrollArea/ScrollArea.js +49 -7
  108. package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -3
  109. package/dist/components/core/ScrollArea/index.d.ts +1 -1
  110. package/dist/components/core/Segmented/SegmentedItem.js +1 -1
  111. package/dist/components/core/Sidebar/Sidebar.d.ts +11 -1
  112. package/dist/components/core/Sidebar/Sidebar.js +51 -17
  113. package/dist/components/core/Sidebar/Sidebar.theme.js +9 -7
  114. package/dist/components/core/Sidebar/Sidebar.types.d.ts +57 -0
  115. package/dist/components/core/Sidebar/SidebarContent.js +3 -1
  116. package/dist/components/core/Sidebar/SidebarContext.d.ts +14 -0
  117. package/dist/components/core/Sidebar/SidebarContext.js +63 -11
  118. package/dist/components/core/Sidebar/SidebarFooter.js +3 -1
  119. package/dist/components/core/Sidebar/SidebarHeader.js +6 -2
  120. package/dist/components/core/Sidebar/SidebarMobileTrigger.d.ts +3 -0
  121. package/dist/components/core/Sidebar/SidebarMobileTrigger.js +29 -0
  122. package/dist/components/core/Sidebar/SidebarNav.js +3 -2
  123. package/dist/components/core/Sidebar/SidebarNavGroup.js +4 -2
  124. package/dist/components/core/Sidebar/SidebarToggle.js +2 -1
  125. package/dist/components/core/Sidebar/SidebarUserProfile.d.ts +3 -0
  126. package/dist/components/core/Sidebar/SidebarUserProfile.js +35 -0
  127. package/dist/components/core/Sidebar/index.d.ts +3 -1
  128. package/dist/components/core/SocialIcon/SocialIcon.js +1 -1
  129. package/dist/components/core/Sortable/Sortable.js +2 -2
  130. package/dist/components/core/Sortable/Sortable.theme.js +1 -1
  131. package/dist/components/core/Sortable/Sortable.types.d.ts +7 -5
  132. package/dist/components/core/Tabs/Tabs.theme.d.ts +1 -1
  133. package/dist/components/core/Tabs/Tabs.theme.js +3 -3
  134. package/dist/components/core/Tabs/TabsBody.js +1 -1
  135. package/dist/components/core/Tabs/TabsTrigger.js +1 -1
  136. package/dist/components/core/Tag/Tag.js +2 -2
  137. package/dist/components/core/Toast/Toast.d.ts +2 -2
  138. package/dist/components/core/Toast/Toast.js +30 -21
  139. package/dist/components/core/Toast/Toast.theme.js +4 -9
  140. package/dist/components/core/Toast/Toast.types.d.ts +4 -21
  141. package/dist/components/core/Toast/index.d.ts +1 -1
  142. package/dist/components/core/Tooltip/Tooltip.js +1 -1
  143. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  144. package/dist/components/core/index.js +11 -0
  145. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +2 -2
  146. package/dist/components/data-display/GanttChart/GanttToolbar.js +1 -1
  147. package/dist/components/data-display/Table/Table.types.d.ts +8 -8
  148. package/dist/components/effects/CustomCursor/CustomCursor.js +2 -2
  149. package/dist/components/effects/GlassSurface/GlassSurface.d.ts +1 -1
  150. package/dist/components/effects/GlassSurface/GlassSurface.js +12 -4
  151. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.d.ts +39 -0
  152. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.animations.js +98 -0
  153. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.d.ts +3 -0
  154. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +104 -0
  155. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.types.d.ts +30 -0
  156. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.d.ts +3 -0
  157. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +36 -0
  158. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.d.ts +3 -0
  159. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +36 -0
  160. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.d.ts +3 -0
  161. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +37 -0
  162. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.d.ts +14 -0
  163. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +41 -0
  164. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.d.ts +25 -0
  165. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +84 -0
  166. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.d.ts +18 -0
  167. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +35 -0
  168. package/dist/components/effects/InteractiveCharacters/index.d.ts +2 -0
  169. package/dist/components/effects/MorphingText/MorphingText.d.ts +1 -1
  170. package/dist/components/effects/MorphingText/MorphingText.js +6 -5
  171. package/dist/components/effects/Neumorphic/InsetCircleButton.d.ts +9 -0
  172. package/dist/components/effects/Neumorphic/InsetCircleButton.js +10 -0
  173. package/dist/components/effects/Neumorphic/InsetPill.d.ts +7 -0
  174. package/dist/components/effects/Neumorphic/InsetPill.js +7 -0
  175. package/dist/components/effects/Neumorphic/index.d.ts +4 -0
  176. package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +1 -1
  177. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +4 -4
  178. package/dist/components/effects/Overlay/Overlay.js +6 -4
  179. package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +8 -0
  180. package/dist/components/effects/PageTransition/PageTransition.animations.js +53 -0
  181. package/dist/components/effects/PageTransition/PageTransition.d.ts +3 -0
  182. package/dist/components/effects/PageTransition/PageTransition.js +71 -0
  183. package/dist/components/effects/PageTransition/PageTransition.types.d.ts +15 -0
  184. package/dist/components/effects/PageTransition/index.d.ts +2 -0
  185. package/dist/components/effects/index.d.ts +6 -0
  186. package/dist/components/effects/index.js +4 -0
  187. package/dist/components/forms/Checkbox/Checkbox.animations.d.ts +14 -0
  188. package/dist/components/forms/Checkbox/Checkbox.animations.js +53 -0
  189. package/dist/components/forms/Checkbox/Checkbox.js +4 -2
  190. package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
  191. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +1 -1
  192. package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -3
  193. package/dist/components/forms/Combobox/Combobox.js +5 -3
  194. package/dist/components/forms/DatePicker/DatePickerBody.js +1 -1
  195. package/dist/components/forms/DateRangePicker/DateRangePicker.animations.d.ts +1 -0
  196. package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +37 -0
  197. package/dist/components/forms/DateRangePicker/DateRangePicker.js +110 -0
  198. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.d.ts +5 -0
  199. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +52 -0
  200. package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +154 -0
  201. package/dist/components/forms/DateRangePicker/DateRangePickerBody.d.ts +6 -0
  202. package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +208 -0
  203. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.d.ts +6 -0
  204. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +41 -0
  205. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.d.ts +6 -0
  206. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +32 -0
  207. package/dist/components/forms/DateRangePicker/dateRangePresets.d.ts +5 -0
  208. package/dist/components/forms/DateRangePicker/dateRangePresets.js +59 -0
  209. package/dist/components/forms/DateRangePicker/index.d.ts +4 -0
  210. package/dist/components/forms/FileUpload/FileUploadProgress.animations.d.ts +36 -0
  211. package/dist/components/forms/FileUpload/FileUploadProgress.animations.js +22 -0
  212. package/dist/components/forms/FileUpload/FileUploadProgress.d.ts +3 -0
  213. package/dist/components/forms/FileUpload/FileUploadProgress.js +111 -0
  214. package/dist/components/forms/FileUpload/FileUploadProgress.theme.d.ts +19 -0
  215. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +27 -0
  216. package/dist/components/forms/FileUpload/FileUploadProgress.types.d.ts +33 -0
  217. package/dist/components/forms/FileUpload/index.d.ts +3 -0
  218. package/dist/components/forms/Input/Input.js +8 -13
  219. package/dist/components/forms/Input/Input.types.d.ts +6 -0
  220. package/dist/components/forms/InputAddress/InputAddress.theme.js +1 -1
  221. package/dist/components/forms/InputCounter/InputCounter.js +1 -1
  222. package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +1 -1
  223. package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
  224. package/dist/components/forms/Radio/Radio.animations.d.ts +10 -0
  225. package/dist/components/forms/Radio/Radio.animations.js +33 -0
  226. package/dist/components/forms/Radio/Radio.js +11 -2
  227. package/dist/components/forms/Radio/Radio.theme.js +3 -3
  228. package/dist/components/forms/RichTextEditor/RichTextEditor.js +23 -14
  229. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
  230. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +11 -0
  231. package/dist/components/forms/Select/Select.d.ts +1 -1
  232. package/dist/components/forms/Select/Select.js +7 -7
  233. package/dist/components/forms/Select/Select.types.d.ts +3 -3
  234. package/dist/components/forms/SelectableCard/SelectableCard.js +1 -1
  235. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  236. package/dist/components/forms/Switch/Switch.theme.js +3 -3
  237. package/dist/components/forms/forms.theme.js +1 -1
  238. package/dist/components/forms/index.d.ts +6 -0
  239. package/dist/components/forms/index.js +8 -0
  240. package/dist/hooks/index.d.ts +1 -0
  241. package/dist/hooks/useMediaQuery.d.ts +5 -0
  242. package/dist/hooks/useMediaQuery.js +21 -0
  243. package/dist/index.js +23 -0
  244. package/dist/styles.css +1 -1
  245. package/dist/utils/dateUtils.js +56 -5
  246. package/dist/utils/formatUtils.d.ts +10 -0
  247. package/dist/utils/formatUtils.js +24 -0
  248. package/dist/utils/index.d.ts +1 -1
  249. package/package.json +12 -4
  250. package/src/global.scss +320 -39
  251. package/src/styles/theme.css +151 -62
  252. package/src/theme-plugin.css +13 -0
  253. package/dist/components/ai/ApprovalCard/ApprovalCard.d.ts +0 -3
  254. package/dist/components/ai/ApprovalCard/ApprovalCard.js +0 -16
  255. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.d.ts +0 -13
  256. package/dist/components/ai/ApprovalCard/ApprovalCard.theme.js +0 -15
  257. package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +0 -43
  258. package/dist/components/ai/ApprovalCard/index.d.ts +0 -2
  259. package/dist/components/ai/MessageHistory/MessageHistory.d.ts +0 -18
  260. package/dist/components/ai/MessageHistory/MessageHistory.js +0 -98
  261. package/dist/components/ai/MessageHistory/MessageHistory.theme.d.ts +0 -2
  262. package/dist/components/ai/MessageHistory/MessageHistory.theme.js +0 -8
  263. package/dist/components/ai/MessageHistory/MessageHistory.types.d.ts +0 -94
  264. package/dist/components/ai/MessageHistory/index.d.ts +0 -3
  265. package/dist/icons/Icon.d.ts +0 -24
  266. package/dist/icons/Icon.js +0 -30
  267. package/dist/icons/Index.d.ts +0 -16
  268. package/dist/icons/core/ChevronUpDown.d.ts +0 -1
  269. package/dist/icons/core/ChevronUpDown.js +0 -7
  270. package/dist/icons/core/DollarIcon.d.ts +0 -1
  271. package/dist/icons/core/DollarIcon.js +0 -5
  272. package/dist/icons/core/LockIcon.d.ts +0 -1
  273. package/dist/icons/core/LockIcon.js +0 -5
  274. package/dist/icons/core/MinusIcon.d.ts +0 -1
  275. package/dist/icons/core/MinusIcon.js +0 -7
  276. package/dist/icons/core/PlusIcon.d.ts +0 -1
  277. package/dist/icons/core/PlusIcon.js +0 -7
  278. package/dist/icons/core/SearchIcon.d.ts +0 -1
  279. package/dist/icons/core/SearchIcon.js +0 -7
  280. package/dist/icons/core/TickIcon.d.ts +0 -1
  281. package/dist/icons/core/TickIcon.js +0 -5
  282. package/dist/icons/core/User.d.ts +0 -1
  283. package/dist/utils/useClickOutside.d.ts +0 -1
@@ -73,16 +73,67 @@ const formatDateCustom = (date, formatString, locale = 'en-US') => {
73
73
  // Year tokens
74
74
  result = result.replace(/YYYY/g, year.toString());
75
75
  result = result.replace(/YY/g, year.toString().slice(-2));
76
- // Month tokens (MMMM before MMM before MM before M)
77
- result = result.replace(/MMMM/g, fullMonths[month - 1]);
78
- result = result.replace(/MMM/g, shortMonths[month - 1]);
76
+ // Month tokens (longest first) use \x00-wrapped placeholders to prevent collisions
77
+ result = result.replace(/MMMM/g, `\x00${fullMonths[month - 1]}\x00`);
78
+ result = result.replace(/MMM/g, `\x00${shortMonths[month - 1]}\x00`);
79
79
  result = result.replace(/MM/g, month.toString().padStart(2, '0'));
80
80
  result = result.replace(/M/g, month.toString());
81
- // Day tokens (DD before D)
81
+ // Day tokens (longest first)
82
82
  result = result.replace(/DD/g, day.toString().padStart(2, '0'));
83
83
  result = result.replace(/D/g, day.toString());
84
+ // Strip placeholders
85
+ result = result.replace(/\x00/g, '');
84
86
  return result;
85
87
  };
88
+ /**
89
+ * Get date range for this week (Monday to Sunday)
90
+ */
91
+ const getThisWeek = () => {
92
+ const now = new Date();
93
+ const dayOfWeek = now.getDay();
94
+ const mondayOffset = dayOfWeek === 0 ? -6 : 1 - dayOfWeek;
95
+ const start = new Date(now);
96
+ start.setDate(now.getDate() + mondayOffset);
97
+ start.setHours(0, 0, 0, 0);
98
+ const end = new Date(start);
99
+ end.setDate(start.getDate() + 6);
100
+ end.setHours(23, 59, 59, 999);
101
+ return { start, end };
102
+ };
103
+ /**
104
+ * Get date range for last week (Monday to Sunday)
105
+ */
106
+ const getLastWeek = () => {
107
+ const thisWeek = getThisWeek();
108
+ const start = new Date(thisWeek.start);
109
+ start.setDate(start.getDate() - 7);
110
+ const end = new Date(thisWeek.start);
111
+ end.setDate(end.getDate() - 1);
112
+ end.setHours(23, 59, 59, 999);
113
+ return { start, end };
114
+ };
115
+ /**
116
+ * Get date range for this month
117
+ */
118
+ const getThisMonth = () => {
119
+ const now = new Date();
120
+ const start = new Date(now.getFullYear(), now.getMonth(), 1);
121
+ start.setHours(0, 0, 0, 0);
122
+ const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);
123
+ end.setHours(23, 59, 59, 999);
124
+ return { start, end };
125
+ };
126
+ /**
127
+ * Get date range for last month
128
+ */
129
+ const getLastMonth = () => {
130
+ const now = new Date();
131
+ const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);
132
+ start.setHours(0, 0, 0, 0);
133
+ const end = new Date(now.getFullYear(), now.getMonth(), 0);
134
+ end.setHours(23, 59, 59, 999);
135
+ return { start, end };
136
+ };
86
137
  // ---------------------------------------------------------------------------
87
138
  // Generic date utilities (shared across components)
88
139
  // ---------------------------------------------------------------------------
@@ -141,4 +192,4 @@ function getDaysBetween(a, b) {
141
192
  return Math.round((end.getTime() - start.getTime()) / 86400000) + 1;
142
193
  }
143
194
 
144
- export { addDays, formatDateCustom, formatTimestamp, getDaysBetween, isSameDay, isWeekend, toDate };
195
+ export { addDays, formatDateCustom, formatTimestamp, getDaysBetween, getLastMonth, getLastWeek, getThisMonth, getThisWeek, isSameDay, isWeekend, toDate };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Format a byte count into a human-readable file size string.
3
+ * Uses binary units (1 KB = 1024 bytes).
4
+ */
5
+ export declare const formatFileSize: (bytes: number) => string;
6
+ /**
7
+ * Extract the file extension from a filename, lowercase.
8
+ * Returns null if no extension is present.
9
+ */
10
+ export declare const getFileExtension: (filename: string) => string | null;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Format a byte count into a human-readable file size string.
3
+ * Uses binary units (1 KB = 1024 bytes).
4
+ */
5
+ const formatFileSize = (bytes) => {
6
+ if (bytes === 0)
7
+ return "0 Bytes";
8
+ const k = 1024;
9
+ const sizes = ["Bytes", "KB", "MB", "GB"];
10
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
11
+ return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i];
12
+ };
13
+ /**
14
+ * Extract the file extension from a filename, lowercase.
15
+ * Returns null if no extension is present.
16
+ */
17
+ const getFileExtension = (filename) => {
18
+ const dotIndex = filename.lastIndexOf(".");
19
+ if (dotIndex === -1 || dotIndex === filename.length - 1)
20
+ return null;
21
+ return filename.slice(dotIndex + 1).toLowerCase();
22
+ };
23
+
24
+ export { formatFileSize, getFileExtension };
@@ -1,7 +1,6 @@
1
1
  export { cn } from "./cn";
2
2
  export { debounce } from "./debounce";
3
3
  export { formatTimestamp, formatDate, formatTime, formatDateCustom, formatRelativeTime, isToday, isYesterday, isThisWeek, getLastNDays, getThisWeek, getLastWeek, getThisMonth, getLastMonth, getThisYear, getLastYear, toDate, addDays, isSameDay, isWeekend, getDaysBetween, getWeekNumber, type DateInput, type TimestampOptions, type DateRange, } from "./dateUtils";
4
- export { useClickOutside } from "./useClickOutside";
5
4
  export { findNextMatchingOption, isValidTypeaheadChar, TYPEAHEAD_TIMEOUT_MS, type TypeaheadOption, type FindNextMatchingOptionParams, } from "./typeaheadUtils";
6
5
  export { timeToMinutes, minutesToTime, getEventDuration, getTotalTimeSlots, getTimeSlotIndex, getTimeSlotForIndex, calculateEventPosition, calculateEventHeight, eventsOverlap, findOverlappingEvents, groupOverlappingEvents, resolveOverlappingEvents, generateTimeGrid, filterEventsByDate, sortEventsByStartTime, separateAllDayEvents, isValidTimeFormat, isValidDateFormat, validateEvent, DEFAULT_GRID_CONFIGS, type CalendarEvent, type GridConfig, type EventPosition, type EventLayout, type TimeSlot, } from "./calendarUtils";
7
6
  export { parseOpenAI, parseAnthropic, parseGemini, parseSSELine, SSE_PARSERS, type SSEFormat, type SSEParser, } from "./sseFormatParsers";
@@ -14,4 +13,5 @@ export * from "./formValidation";
14
13
  export { calculateVelocity, clampScroll, detectScrollDirection, isReducedMotion, lerp, calculateScrollProgress, normalizeWheelDelta, isScrollable, getMaxScroll, throttle, } from './smoothScrollUtils';
15
14
  export { PerformanceMonitor, usePerformanceMonitor } from './performanceMonitor';
16
15
  export { type SemanticColor, semanticBgColors, semanticTextColors, semanticSpinnerColors, } from './colorUtils';
16
+ export { formatFileSize, getFileExtension } from './formatUtils';
17
17
  export { generatePalette, generateThemeCSS, type PaletteStep, type GeneratedPalette, type GeneratePaletteOptions, } from './paletteGenerator';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flikk/ui",
3
- "version": "1.0.0-beta.13",
3
+ "version": "1.0.0-beta.15",
4
4
  "description": "A modern React component library built with TypeScript, Tailwind CSS v4, and Framer Motion. Follows the shadcn philosophy with complete className override support.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -71,6 +71,7 @@
71
71
  "test": "echo \"Error: no test specified\" && exit 1",
72
72
  "build": "rollup -c && npm run build:css",
73
73
  "build:css": "tailwindcss -m -i ./src/tailwind-config.css -o ./dist/styles.css",
74
+ "analyze": "ANALYZE=true rollup -c && open stats.html",
74
75
  "watch": "rollup -c -w",
75
76
  "typecheck": "tsc --noEmit",
76
77
  "lint": "eslint src --ext .ts,.tsx",
@@ -104,8 +105,11 @@
104
105
  "npm": ">=10.0.0"
105
106
  },
106
107
  "peerDependencies": {
108
+ "@heroicons/react": ">=2.0.0",
107
109
  "@react-three/drei": ">=10.0.0",
108
110
  "@react-three/fiber": ">=9.0.0",
111
+ "gsap": ">=3.12.0",
112
+ "motion": ">=12.0.0",
109
113
  "react": ">=18.0.0",
110
114
  "react-dom": ">=18.0.0",
111
115
  "react-markdown": "^9.0.1 || ^10.0.0",
@@ -132,11 +136,15 @@
132
136
  },
133
137
  "@react-three/drei": {
134
138
  "optional": true
139
+ },
140
+ "gsap": {
141
+ "optional": true
135
142
  }
136
143
  },
137
144
  "devDependencies": {
138
145
  "@chromatic-com/storybook": "^5.0.0",
139
146
  "@emotion/is-prop-valid": "^1.4.0",
147
+ "@heroicons/react": "^2.2.0",
140
148
  "@react-three/drei": "^10.7.7",
141
149
  "@react-three/fiber": "^9.5.0",
142
150
  "@rollup/plugin-commonjs": "^29.0.0",
@@ -158,6 +166,8 @@
158
166
  "autoprefixer": "^10.4.24",
159
167
  "concurrently": "^9.2.1",
160
168
  "eslint-plugin-storybook": "^10.2.7",
169
+ "gsap": "^3.14.2",
170
+ "motion": "^12.19.1",
161
171
  "postcss": "^8.5.3",
162
172
  "react": "^19.2.4",
163
173
  "react-dom": "^19.2.4",
@@ -165,16 +175,14 @@
165
175
  "react-syntax-highlighter": "^16.1.0",
166
176
  "remark-gfm": "^4.0.1",
167
177
  "rollup": "^4.57.1",
178
+ "rollup-plugin-visualizer": "^7.0.1",
168
179
  "storybook": "^10.2.3",
169
180
  "three": "^0.182.0",
170
181
  "tslib": "^2.8.1",
171
182
  "typescript": "^5.9.3"
172
183
  },
173
184
  "dependencies": {
174
- "@heroicons/react": "^2.2.0",
175
185
  "clsx": "^2.1.1",
176
- "gsap": "^3.14.2",
177
- "motion": "^12.19.1",
178
186
  "tailwind-merge": "^3.0.2"
179
187
  }
180
188
  }
package/src/global.scss CHANGED
@@ -506,6 +506,102 @@
506
506
  }
507
507
  }
508
508
 
509
+ /* ─── Neumorphic Surface Utilities ───
510
+ Usage: <div class="neu-raised rounded-2xl p-4 bg-neutral-800">
511
+ Uses ::after for gradient border — composes cleanly with bg-image (::before).
512
+ Content inside needs "relative z-2" to sit above the ::after border.
513
+ */
514
+ @layer utilities {
515
+ .neu-raised {
516
+ position: relative;
517
+ box-shadow: var(--neu-raised-shadow);
518
+
519
+ &::after {
520
+ content: "";
521
+ position: absolute;
522
+ inset: 0;
523
+ border-radius: inherit;
524
+ padding: var(--neu-border-width, 1.5px);
525
+ background: var(--neu-raised-border);
526
+ -webkit-mask:
527
+ linear-gradient(#fff 0 0) content-box,
528
+ linear-gradient(#fff 0 0);
529
+ -webkit-mask-composite: xor;
530
+ mask-composite: exclude;
531
+ pointer-events: none;
532
+ z-index: 1;
533
+ }
534
+ }
535
+
536
+ .neu-inset {
537
+ position: relative;
538
+ box-shadow: var(--neu-inset-shadow);
539
+
540
+ &::after {
541
+ content: "";
542
+ position: absolute;
543
+ inset: 0;
544
+ border-radius: inherit;
545
+ padding: var(--neu-border-width, 1.5px);
546
+ background: var(--neu-inset-border);
547
+ -webkit-mask:
548
+ linear-gradient(#fff 0 0) content-box,
549
+ linear-gradient(#fff 0 0);
550
+ -webkit-mask-composite: xor;
551
+ mask-composite: exclude;
552
+ pointer-events: none;
553
+ z-index: 1;
554
+ }
555
+ }
556
+
557
+ /* Circle button — outer groove */
558
+ .neu-circle-groove {
559
+ position: relative;
560
+ border-radius: 9999px;
561
+ box-shadow: var(--neu-circle-groove-shadow);
562
+ border: 1px solid rgba(0,0,0,0.12);
563
+
564
+ .dark & {
565
+ border-color: rgba(0,0,0,0.40);
566
+ }
567
+ }
568
+
569
+ /* Circle button — inner disc (gradient border via ::after) */
570
+ .neu-circle-disc {
571
+ position: absolute;
572
+ inset: 2px;
573
+ border-radius: 9999px;
574
+ box-shadow: var(--neu-circle-disc-shadow);
575
+ display: flex;
576
+ align-items: center;
577
+ justify-content: center;
578
+
579
+ &::after {
580
+ content: "";
581
+ position: absolute;
582
+ inset: 0;
583
+ border-radius: inherit;
584
+ padding: var(--neu-border-width, 1.5px);
585
+ background: var(--neu-raised-border);
586
+ -webkit-mask:
587
+ linear-gradient(#fff 0 0) content-box,
588
+ linear-gradient(#fff 0 0);
589
+ -webkit-mask-composite: xor;
590
+ mask-composite: exclude;
591
+ pointer-events: none;
592
+ z-index: 1;
593
+ }
594
+ }
595
+
596
+ /* Preset border-width modifiers */
597
+ .neu-border-thin {
598
+ --neu-border-width: 1px;
599
+ }
600
+ .neu-border-thick {
601
+ --neu-border-width: 2px;
602
+ }
603
+ }
604
+
509
605
  /* Background image utility system
510
606
  Usage: <div className="background-1 background-blur-2xl background-scale-125">
511
607
  Uses ::before pseudo-element — content needs "relative z-10" to appear above.
@@ -513,16 +609,7 @@
513
609
  */
514
610
  @layer utilities {
515
611
  /* Shared base setup for all bg-image classes */
516
- .bg-image-1,
517
- .bg-image-2,
518
- .bg-image-3,
519
- .bg-image-4,
520
- .bg-image-5,
521
612
  .bg-image {
522
- --bg-image-blur: 0px;
523
- --bg-image-scale: 1;
524
- --bg-image-opacity: 0.5;
525
- --bg-image-blend: multiply;
526
613
  position: relative;
527
614
  overflow: hidden;
528
615
 
@@ -534,51 +621,243 @@
534
621
  background-image: var(--bg-image);
535
622
  background-size: cover;
536
623
  background-position: center;
537
- filter: blur(var(--bg-image-blur));
538
- transform: scale(var(--bg-image-scale));
539
- opacity: var(--bg-image-opacity);
540
- mix-blend-mode: var(--bg-image-blend);
624
+ filter: blur(var(--bg-image-blur, 0px));
625
+ transform: scale(var(--bg-image-scale, 1));
626
+ opacity: var(--bg-image-opacity, 0.5);
627
+ mix-blend-mode: var(--bg-image-blend, multiply);
541
628
  pointer-events: none;
542
629
  }
543
630
  }
544
631
 
545
632
  /* Image presets */
546
- .bg-image-1 { --bg-image: url("/bg/1.jpg"); }
547
- .bg-image-2 { --bg-image: url("/bg/2.jpg"); }
548
- .bg-image-3 { --bg-image: url("/bg/3.jpg"); }
549
- .bg-image-4 { --bg-image: url("/bg/4.jpg"); }
550
- .bg-image-5 { --bg-image: url("/bg/5.jpg"); }
633
+ .bg-image-1 {
634
+ --bg-image: url("/bg/1.jpg");
635
+ }
636
+ .bg-image-2 {
637
+ --bg-image: url("/bg/2.jpg");
638
+ }
639
+ .bg-image-3 {
640
+ --bg-image: url("/bg/3.jpg");
641
+ }
642
+ .bg-image-4 {
643
+ --bg-image: url("/bg/4.jpg");
644
+ }
645
+ .bg-image-5 {
646
+ --bg-image: url("/bg/5.jpg");
647
+ }
648
+ .bg-image-6 {
649
+ --bg-image: url("/bg/6.jpg");
650
+ }
651
+ .bg-image-7 {
652
+ --bg-image: url("/bg/7.jpg");
653
+ }
654
+ .bg-image-8 {
655
+ --bg-image: url("/bg/8.jpg");
656
+ }
657
+ .bg-image-9 {
658
+ --bg-image: url("/bg/9.jpg");
659
+ }
660
+ .bg-image-10 {
661
+ --bg-image: url("/bg/10.jpg");
662
+ }
663
+ .bg-image-11 {
664
+ --bg-image: url("/bg/11.jpg");
665
+ }
666
+ .bg-image-12 {
667
+ --bg-image: url("/bg/12.jpg");
668
+ }
669
+ .bg-image-13 {
670
+ --bg-image: url("/bg/13.jpg");
671
+ }
672
+ .bg-image-14 {
673
+ --bg-image: url("/bg/14.jpg");
674
+ }
675
+ .bg-image-15 {
676
+ --bg-image: url("/bg/15.jpg");
677
+ }
678
+ .bg-image-16 {
679
+ --bg-image: url("/bg/16.jpg");
680
+ }
681
+ .bg-image-17 {
682
+ --bg-image: url("/bg/17.jpg");
683
+ }
684
+ .bg-image-18 {
685
+ --bg-image: url("/bg/18.jpg");
686
+ }
687
+ .bg-image-19 {
688
+ --bg-image: url("/bg/19.jpg");
689
+ }
690
+ .bg-image-20 {
691
+ --bg-image: url("/bg/20.jpg");
692
+ }
693
+ .bg-image-21 {
694
+ --bg-image: url("/bg/21.jpg");
695
+ }
696
+ .bg-image-22 {
697
+ --bg-image: url("/bg/22.jpg");
698
+ }
699
+ .bg-image-23 {
700
+ --bg-image: url("/bg/23.jpg");
701
+ }
702
+ .bg-image-24 {
703
+ --bg-image: url("/bg/24.jpg");
704
+ }
551
705
 
552
706
  /* Blur modifiers */
553
- .bg-image-blur-sm { --bg-image-blur: 4px; }
554
- .bg-image-blur-md { --bg-image-blur: 8px; }
555
- .bg-image-blur-lg { --bg-image-blur: 16px; }
556
- .bg-image-blur-xl { --bg-image-blur: 24px; }
557
- .bg-image-blur-2xl { --bg-image-blur: 40px; }
558
- .bg-image-blur-3xl { --bg-image-blur: 64px; }
707
+ .bg-image-blur-sm {
708
+ --bg-image-blur: 4px;
709
+ }
710
+ .bg-image-blur-md {
711
+ --bg-image-blur: 8px;
712
+ }
713
+ .bg-image-blur-lg {
714
+ --bg-image-blur: 16px;
715
+ }
716
+ .bg-image-blur-xl {
717
+ --bg-image-blur: 24px;
718
+ }
719
+ .bg-image-blur-2xl {
720
+ --bg-image-blur: 40px;
721
+ }
722
+ .bg-image-blur-3xl {
723
+ --bg-image-blur: 64px;
724
+ }
559
725
 
560
726
  /* Scale modifiers */
561
- .bg-image-scale-105 { --bg-image-scale: 1.05; }
562
- .bg-image-scale-110 { --bg-image-scale: 1.1; }
563
- .bg-image-scale-125 { --bg-image-scale: 1.25; }
564
- .bg-image-scale-150 { --bg-image-scale: 1.5; }
727
+ .bg-image-scale-105 {
728
+ --bg-image-scale: 1.05;
729
+ }
730
+ .bg-image-scale-110 {
731
+ --bg-image-scale: 1.1;
732
+ }
733
+ .bg-image-scale-125 {
734
+ --bg-image-scale: 1.25;
735
+ }
736
+ .bg-image-scale-150 {
737
+ --bg-image-scale: 1.5;
738
+ }
565
739
 
566
740
  /* Opacity modifiers */
567
- .bg-image-opacity-25 { --bg-image-opacity: 0.25; }
568
- .bg-image-opacity-50 { --bg-image-opacity: 0.5; }
569
- .bg-image-opacity-75 { --bg-image-opacity: 0.75; }
741
+ .bg-image-opacity-0 {
742
+ --bg-image-opacity: 0;
743
+ }
744
+ .bg-image-opacity-5 {
745
+ --bg-image-opacity: 0.05;
746
+ }
747
+ .bg-image-opacity-10 {
748
+ --bg-image-opacity: 0.1;
749
+ }
750
+ .bg-image-opacity-15 {
751
+ --bg-image-opacity: 0.15;
752
+ }
753
+ .bg-image-opacity-20 {
754
+ --bg-image-opacity: 0.2;
755
+ }
756
+ .bg-image-opacity-25 {
757
+ --bg-image-opacity: 0.25;
758
+ }
759
+ .bg-image-opacity-30 {
760
+ --bg-image-opacity: 0.3;
761
+ }
762
+ .bg-image-opacity-35 {
763
+ --bg-image-opacity: 0.35;
764
+ }
765
+ .bg-image-opacity-40 {
766
+ --bg-image-opacity: 0.4;
767
+ }
768
+ .bg-image-opacity-45 {
769
+ --bg-image-opacity: 0.45;
770
+ }
771
+ .bg-image-opacity-50 {
772
+ --bg-image-opacity: 0.5;
773
+ }
774
+ .bg-image-opacity-55 {
775
+ --bg-image-opacity: 0.55;
776
+ }
777
+ .bg-image-opacity-60 {
778
+ --bg-image-opacity: 0.6;
779
+ }
780
+ .bg-image-opacity-65 {
781
+ --bg-image-opacity: 0.65;
782
+ }
783
+ .bg-image-opacity-70 {
784
+ --bg-image-opacity: 0.7;
785
+ }
786
+ .bg-image-opacity-75 {
787
+ --bg-image-opacity: 0.75;
788
+ }
789
+ .bg-image-opacity-80 {
790
+ --bg-image-opacity: 0.8;
791
+ }
792
+ .bg-image-opacity-85 {
793
+ --bg-image-opacity: 0.85;
794
+ }
795
+ .bg-image-opacity-90 {
796
+ --bg-image-opacity: 0.9;
797
+ }
798
+ .bg-image-opacity-95 {
799
+ --bg-image-opacity: 0.95;
800
+ }
801
+ .bg-image-opacity-100 {
802
+ --bg-image-opacity: 1;
803
+ }
570
804
 
571
805
  /* Blend mode modifiers */
572
- .bg-image-blend-multiply { --bg-image-blend: multiply; }
573
- .bg-image-blend-overlay { --bg-image-blend: overlay; }
574
- .bg-image-blend-soft-light { --bg-image-blend: soft-light; }
575
- .bg-image-blend-normal { --bg-image-blend: normal; }
806
+ .bg-image-blend-normal {
807
+ --bg-image-blend: normal;
808
+ }
809
+ .bg-image-blend-multiply {
810
+ --bg-image-blend: multiply;
811
+ }
812
+ .bg-image-blend-screen {
813
+ --bg-image-blend: screen;
814
+ }
815
+ .bg-image-blend-overlay {
816
+ --bg-image-blend: overlay;
817
+ }
818
+ .bg-image-blend-darken {
819
+ --bg-image-blend: darken;
820
+ }
821
+ .bg-image-blend-lighten {
822
+ --bg-image-blend: lighten;
823
+ }
824
+ .bg-image-blend-color-dodge {
825
+ --bg-image-blend: color-dodge;
826
+ }
827
+ .bg-image-blend-color-burn {
828
+ --bg-image-blend: color-burn;
829
+ }
830
+ .bg-image-blend-hard-light {
831
+ --bg-image-blend: hard-light;
832
+ }
833
+ .bg-image-blend-soft-light {
834
+ --bg-image-blend: soft-light;
835
+ }
836
+ .bg-image-blend-difference {
837
+ --bg-image-blend: difference;
838
+ }
839
+ .bg-image-blend-exclusion {
840
+ --bg-image-blend: exclusion;
841
+ }
842
+ .bg-image-blend-hue {
843
+ --bg-image-blend: hue;
844
+ }
845
+ .bg-image-blend-saturation {
846
+ --bg-image-blend: saturation;
847
+ }
848
+ .bg-image-blend-color {
849
+ --bg-image-blend: color;
850
+ }
851
+ .bg-image-blend-luminosity {
852
+ --bg-image-blend: luminosity;
853
+ }
576
854
  }
577
855
 
578
856
  /* Apply fonts globally */
579
857
  html,
580
858
  body {
581
859
  font-family: var(--font-family-base);
860
+ font-size: 14px;
582
861
  -webkit-font-smoothing: antialiased;
583
862
  -moz-osx-font-smoothing: grayscale;
584
863
  }
@@ -661,13 +940,15 @@ body {
661
940
  /* Progress bar indeterminate animation */
662
941
  @keyframes progress-indeterminate {
663
942
  0% {
664
- transform: translateX(-100%);
943
+ left: -33%;
944
+ width: 33%;
665
945
  }
666
946
  50% {
667
- transform: translateX(200%);
947
+ left: 40%;
948
+ width: 45%;
668
949
  }
669
950
  100% {
670
- transform: translateX(-100%);
951
+ left: 100%;
952
+ width: 33%;
671
953
  }
672
954
  }
673
-