@licklist/design 0.78.5-dev.105 → 0.78.5-dev.107

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 (371) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/bitbucket-pipelines.yml +13 -4
  3. package/dist/index.js +1 -1
  4. package/dist/product-set/form/ProductsControl.d.ts +2 -1
  5. package/dist/product-set/form/ProductsControl.d.ts.map +1 -1
  6. package/dist/product-set/form/ProductsControl.js +0 -24
  7. package/dist/v2/components/DataTable/DataTable.d.ts.map +1 -1
  8. package/dist/v2/components/DataTable/DataTable.js +86 -2
  9. package/dist/v2/components/InputCheckbox/InputCheckbox.scss.js +1 -1
  10. package/dist/v2/components/Modal/DeleteModal.d.ts.map +1 -1
  11. package/dist/v2/components/Modal/DeleteModal.js +13 -11
  12. package/dist/v2/components/Toggle/Toggle.d.ts.map +1 -1
  13. package/dist/v2/components/Toggle/Toggle.js +8 -5
  14. package/dist/v2/components/ZoneCard/ZoneCard.scss.js +1 -1
  15. package/dist/v2/components/index.d.ts +1 -1
  16. package/dist/v2/components/index.d.ts.map +1 -1
  17. package/dist/v2/icons/index.d.ts +4 -0
  18. package/dist/v2/icons/index.d.ts.map +1 -1
  19. package/dist/v2/icons/index.js +47 -16
  20. package/dist/v2/index.d.ts +0 -4
  21. package/dist/v2/index.d.ts.map +1 -1
  22. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +0 -3
  23. package/dist/v2/pages/Settings/components/SidebarNavItem.js +0 -3
  24. package/package.json +6 -6
  25. package/rollup.config.js +16 -2
  26. package/src/iframe/payment/payment-status-page/PaymentStatusPage.tsx +1 -1
  27. package/src/product-set/form/ProductsControl.tsx +2 -1
  28. package/src/v2/components/DataTable/DataTable.tsx +23 -1
  29. package/src/v2/components/InputCheckbox/InputCheckbox.scss +6 -6
  30. package/src/v2/components/Modal/DeleteModal.tsx +12 -20
  31. package/src/v2/components/Toggle/Toggle.tsx +6 -5
  32. package/src/v2/components/ZoneCard/ZoneCard.scss +78 -0
  33. package/src/v2/components/index.ts +1 -0
  34. package/src/v2/icons/index.tsx +10 -0
  35. package/src/v2/index.ts +0 -73
  36. package/src/v2/navigation/Navigation/Navigation.stories.tsx +137 -0
  37. package/dist/v2/shadcn/components/ui/accordion.d.ts +0 -8
  38. package/dist/v2/shadcn/components/ui/accordion.d.ts.map +0 -1
  39. package/dist/v2/shadcn/components/ui/alert-dialog.d.ts +0 -21
  40. package/dist/v2/shadcn/components/ui/alert-dialog.d.ts.map +0 -1
  41. package/dist/v2/shadcn/components/ui/alert.d.ts +0 -9
  42. package/dist/v2/shadcn/components/ui/alert.d.ts.map +0 -1
  43. package/dist/v2/shadcn/components/ui/aspect-ratio.d.ts +0 -4
  44. package/dist/v2/shadcn/components/ui/aspect-ratio.d.ts.map +0 -1
  45. package/dist/v2/shadcn/components/ui/avatar.d.ts +0 -7
  46. package/dist/v2/shadcn/components/ui/avatar.d.ts.map +0 -1
  47. package/dist/v2/shadcn/components/ui/badge.d.ts +0 -10
  48. package/dist/v2/shadcn/components/ui/badge.d.ts.map +0 -1
  49. package/dist/v2/shadcn/components/ui/breadcrumb.d.ts +0 -20
  50. package/dist/v2/shadcn/components/ui/breadcrumb.d.ts.map +0 -1
  51. package/dist/v2/shadcn/components/ui/button.d.ts +0 -14
  52. package/dist/v2/shadcn/components/ui/button.d.ts.map +0 -1
  53. package/dist/v2/shadcn/components/ui/calendar.d.ts +0 -9
  54. package/dist/v2/shadcn/components/ui/calendar.d.ts.map +0 -1
  55. package/dist/v2/shadcn/components/ui/card.d.ts +0 -9
  56. package/dist/v2/shadcn/components/ui/card.d.ts.map +0 -1
  57. package/dist/v2/shadcn/components/ui/carousel.d.ts +0 -19
  58. package/dist/v2/shadcn/components/ui/carousel.d.ts.map +0 -1
  59. package/dist/v2/shadcn/components/ui/checkbox.d.ts +0 -6
  60. package/dist/v2/shadcn/components/ui/checkbox.d.ts.map +0 -1
  61. package/dist/v2/shadcn/components/ui/checkbox.js +0 -115
  62. package/dist/v2/shadcn/components/ui/checkbox.scss.js +0 -6
  63. package/dist/v2/shadcn/components/ui/collapsible.d.ts +0 -6
  64. package/dist/v2/shadcn/components/ui/collapsible.d.ts.map +0 -1
  65. package/dist/v2/shadcn/components/ui/command.d.ts +0 -83
  66. package/dist/v2/shadcn/components/ui/command.d.ts.map +0 -1
  67. package/dist/v2/shadcn/components/ui/context-menu.d.ts +0 -28
  68. package/dist/v2/shadcn/components/ui/context-menu.d.ts.map +0 -1
  69. package/dist/v2/shadcn/components/ui/dialog.d.ts +0 -20
  70. package/dist/v2/shadcn/components/ui/dialog.d.ts.map +0 -1
  71. package/dist/v2/shadcn/components/ui/dialog.js +0 -169
  72. package/dist/v2/shadcn/components/ui/drawer.d.ts +0 -23
  73. package/dist/v2/shadcn/components/ui/drawer.d.ts.map +0 -1
  74. package/dist/v2/shadcn/components/ui/dropdown-menu.d.ts +0 -28
  75. package/dist/v2/shadcn/components/ui/dropdown-menu.d.ts.map +0 -1
  76. package/dist/v2/shadcn/components/ui/form.d.ts +0 -24
  77. package/dist/v2/shadcn/components/ui/form.d.ts.map +0 -1
  78. package/dist/v2/shadcn/components/ui/hover-card.d.ts +0 -7
  79. package/dist/v2/shadcn/components/ui/hover-card.d.ts.map +0 -1
  80. package/dist/v2/shadcn/components/ui/input-otp.d.ts +0 -35
  81. package/dist/v2/shadcn/components/ui/input-otp.d.ts.map +0 -1
  82. package/dist/v2/shadcn/components/ui/input.d.ts +0 -6
  83. package/dist/v2/shadcn/components/ui/input.d.ts.map +0 -1
  84. package/dist/v2/shadcn/components/ui/label.d.ts +0 -6
  85. package/dist/v2/shadcn/components/ui/label.d.ts.map +0 -1
  86. package/dist/v2/shadcn/components/ui/menubar.d.ts +0 -34
  87. package/dist/v2/shadcn/components/ui/menubar.d.ts.map +0 -1
  88. package/dist/v2/shadcn/components/ui/navigation-menu.d.ts +0 -13
  89. package/dist/v2/shadcn/components/ui/navigation-menu.d.ts.map +0 -1
  90. package/dist/v2/shadcn/components/ui/pagination.d.ts +0 -29
  91. package/dist/v2/shadcn/components/ui/pagination.d.ts.map +0 -1
  92. package/dist/v2/shadcn/components/ui/popover.d.ts +0 -7
  93. package/dist/v2/shadcn/components/ui/popover.d.ts.map +0 -1
  94. package/dist/v2/shadcn/components/ui/progress.d.ts +0 -5
  95. package/dist/v2/shadcn/components/ui/progress.d.ts.map +0 -1
  96. package/dist/v2/shadcn/components/ui/radio-card.d.ts +0 -12
  97. package/dist/v2/shadcn/components/ui/radio-card.d.ts.map +0 -1
  98. package/dist/v2/shadcn/components/ui/radio-group.d.ts +0 -6
  99. package/dist/v2/shadcn/components/ui/radio-group.d.ts.map +0 -1
  100. package/dist/v2/shadcn/components/ui/scroll-area.d.ts +0 -6
  101. package/dist/v2/shadcn/components/ui/scroll-area.d.ts.map +0 -1
  102. package/dist/v2/shadcn/components/ui/select.d.ts +0 -14
  103. package/dist/v2/shadcn/components/ui/select.d.ts.map +0 -1
  104. package/dist/v2/shadcn/components/ui/separator.d.ts +0 -5
  105. package/dist/v2/shadcn/components/ui/separator.d.ts.map +0 -1
  106. package/dist/v2/shadcn/components/ui/sheet.d.ts +0 -26
  107. package/dist/v2/shadcn/components/ui/sheet.d.ts.map +0 -1
  108. package/dist/v2/shadcn/components/ui/sidebar.d.ts +0 -67
  109. package/dist/v2/shadcn/components/ui/sidebar.d.ts.map +0 -1
  110. package/dist/v2/shadcn/components/ui/skeleton.d.ts +0 -3
  111. package/dist/v2/shadcn/components/ui/skeleton.d.ts.map +0 -1
  112. package/dist/v2/shadcn/components/ui/slider.d.ts +0 -5
  113. package/dist/v2/shadcn/components/ui/slider.d.ts.map +0 -1
  114. package/dist/v2/shadcn/components/ui/switch.d.ts +0 -6
  115. package/dist/v2/shadcn/components/ui/switch.d.ts.map +0 -1
  116. package/dist/v2/shadcn/components/ui/switch.js +0 -115
  117. package/dist/v2/shadcn/components/ui/switch.scss.js +0 -6
  118. package/dist/v2/shadcn/components/ui/table-pagination.d.ts +0 -11
  119. package/dist/v2/shadcn/components/ui/table-pagination.d.ts.map +0 -1
  120. package/dist/v2/shadcn/components/ui/table.d.ts +0 -11
  121. package/dist/v2/shadcn/components/ui/table.d.ts.map +0 -1
  122. package/dist/v2/shadcn/components/ui/tabs.d.ts +0 -8
  123. package/dist/v2/shadcn/components/ui/tabs.d.ts.map +0 -1
  124. package/dist/v2/shadcn/components/ui/textarea.d.ts +0 -6
  125. package/dist/v2/shadcn/components/ui/textarea.d.ts.map +0 -1
  126. package/dist/v2/shadcn/components/ui/toast.d.ts +0 -16
  127. package/dist/v2/shadcn/components/ui/toast.d.ts.map +0 -1
  128. package/dist/v2/shadcn/components/ui/toaster.d.ts +0 -2
  129. package/dist/v2/shadcn/components/ui/toaster.d.ts.map +0 -1
  130. package/dist/v2/shadcn/components/ui/toggle-group.d.ts +0 -13
  131. package/dist/v2/shadcn/components/ui/toggle-group.d.ts.map +0 -1
  132. package/dist/v2/shadcn/components/ui/toggle.d.ts +0 -13
  133. package/dist/v2/shadcn/components/ui/toggle.d.ts.map +0 -1
  134. package/dist/v2/shadcn/components/ui/tooltip.d.ts +0 -8
  135. package/dist/v2/shadcn/components/ui/tooltip.d.ts.map +0 -1
  136. package/dist/v2/shadcn/components/ui/use-toast.d.ts +0 -3
  137. package/dist/v2/shadcn/components/ui/use-toast.d.ts.map +0 -1
  138. package/dist/v2/shadcn/hooks/use-mobile.d.ts +0 -2
  139. package/dist/v2/shadcn/hooks/use-mobile.d.ts.map +0 -1
  140. package/dist/v2/shadcn/hooks/use-toast.d.ts +0 -45
  141. package/dist/v2/shadcn/hooks/use-toast.d.ts.map +0 -1
  142. package/dist/v2/shadcn/index.d.ts +0 -20
  143. package/dist/v2/shadcn/index.d.ts.map +0 -1
  144. package/dist/v2/shadcn/lib/utils.d.ts +0 -3
  145. package/dist/v2/shadcn/lib/utils.d.ts.map +0 -1
  146. package/dist/v2/shadcn/lib/utils.js +0 -11
  147. package/dist/v2/shadcn/styles/globals.css +0 -112
  148. package/src/v2/shadcn/_reference/AccountManagerCard.tsx +0 -45
  149. package/src/v2/shadcn/_reference/AffiliatesTable.tsx +0 -178
  150. package/src/v2/shadcn/_reference/AuditArchive.tsx +0 -165
  151. package/src/v2/shadcn/_reference/AuditContent.tsx +0 -270
  152. package/src/v2/shadcn/_reference/AutomationsGeneralSettings.tsx +0 -251
  153. package/src/v2/shadcn/_reference/AvatarUpload.tsx +0 -150
  154. package/src/v2/shadcn/_reference/BookingsSummaryCard.tsx +0 -268
  155. package/src/v2/shadcn/_reference/CodeCleanUpAudit.tsx +0 -274
  156. package/src/v2/shadcn/_reference/CompaniesTable.tsx +0 -387
  157. package/src/v2/shadcn/_reference/ComponentAudit.tsx +0 -239
  158. package/src/v2/shadcn/_reference/ConfigureSettingsCard.tsx +0 -95
  159. package/src/v2/shadcn/_reference/CustomerCard.tsx +0 -155
  160. package/src/v2/shadcn/_reference/DashboardCards.tsx +0 -50
  161. package/src/v2/shadcn/_reference/DashboardFooter.tsx +0 -18
  162. package/src/v2/shadcn/_reference/DiarySettings.tsx +0 -187
  163. package/src/v2/shadcn/_reference/DiaryView.tsx +0 -998
  164. package/src/v2/shadcn/_reference/EmptyState.tsx +0 -76
  165. package/src/v2/shadcn/_reference/EntityInfoCard.tsx +0 -48
  166. package/src/v2/shadcn/_reference/ExistingUserAssignments.tsx +0 -131
  167. package/src/v2/shadcn/_reference/FeatureToggle.tsx +0 -72
  168. package/src/v2/shadcn/_reference/FlowCard.tsx +0 -170
  169. package/src/v2/shadcn/_reference/FlowsContent.tsx +0 -688
  170. package/src/v2/shadcn/_reference/FlowsGeneralSettings.tsx +0 -27
  171. package/src/v2/shadcn/_reference/GeneralSettings.tsx +0 -33
  172. package/src/v2/shadcn/_reference/InventoryGeneralSettings.tsx +0 -82
  173. package/src/v2/shadcn/_reference/LanguageSelector.tsx +0 -97
  174. package/src/v2/shadcn/_reference/LoadingScreen.tsx +0 -25
  175. package/src/v2/shadcn/_reference/LoadingSpinner.tsx +0 -41
  176. package/src/v2/shadcn/_reference/ManagedClientsList.tsx +0 -121
  177. package/src/v2/shadcn/_reference/NPSScore.tsx +0 -379
  178. package/src/v2/shadcn/_reference/NPSSummaryCard.tsx +0 -181
  179. package/src/v2/shadcn/_reference/NotificationBanner.tsx +0 -129
  180. package/src/v2/shadcn/_reference/NotificationPanel.tsx +0 -208
  181. package/src/v2/shadcn/_reference/OnlineUsersCard.tsx +0 -73
  182. package/src/v2/shadcn/_reference/ProtectedRoute.tsx +0 -39
  183. package/src/v2/shadcn/_reference/ProvidersTable.tsx +0 -353
  184. package/src/v2/shadcn/_reference/QuickAddPanel.tsx +0 -1057
  185. package/src/v2/shadcn/_reference/QuickFilters.tsx +0 -112
  186. package/src/v2/shadcn/_reference/ScheduleView.tsx +0 -410
  187. package/src/v2/shadcn/_reference/ScrollToTop.tsx +0 -14
  188. package/src/v2/shadcn/_reference/SecondaryNav.tsx +0 -50
  189. package/src/v2/shadcn/_reference/SecuritySettings.tsx +0 -258
  190. package/src/v2/shadcn/_reference/SessionDetailView.tsx +0 -294
  191. package/src/v2/shadcn/_reference/Sidebar.tsx +0 -14
  192. package/src/v2/shadcn/_reference/SidebarAwareLayout.tsx +0 -30
  193. package/src/v2/shadcn/_reference/SidebarLabelCustomization.tsx +0 -285
  194. package/src/v2/shadcn/_reference/SimulationBanner.tsx +0 -57
  195. package/src/v2/shadcn/_reference/SortControls.tsx +0 -65
  196. package/src/v2/shadcn/_reference/StatusBadge.tsx +0 -49
  197. package/src/v2/shadcn/_reference/StyleGuideContent.tsx +0 -331
  198. package/src/v2/shadcn/_reference/TableActionMenu.tsx +0 -126
  199. package/src/v2/shadcn/_reference/ThemeProvider.tsx +0 -119
  200. package/src/v2/shadcn/_reference/ThemeSettings.tsx +0 -73
  201. package/src/v2/shadcn/_reference/TopNavigation.tsx +0 -332
  202. package/src/v2/shadcn/_reference/UserActivityHistory.tsx +0 -209
  203. package/src/v2/shadcn/_reference/UserLanguageSettings.tsx +0 -94
  204. package/src/v2/shadcn/_reference/UserPanel.tsx +0 -472
  205. package/src/v2/shadcn/_reference/UsersTable.tsx +0 -1023
  206. package/src/v2/shadcn/_reference/WaiverForm.tsx +0 -301
  207. package/src/v2/shadcn/_reference/WaiversGeneralSettings.tsx +0 -46
  208. package/src/v2/shadcn/_reference/WaiversTable.tsx +0 -290
  209. package/src/v2/shadcn/_reference/WaiversTemplatesSettings.tsx +0 -416
  210. package/src/v2/shadcn/_reference/ai/AIChatPanel.tsx +0 -313
  211. package/src/v2/shadcn/_reference/ai/AIChatSearchBar.tsx +0 -36
  212. package/src/v2/shadcn/_reference/ai/ChatInteractiveBlock.tsx +0 -298
  213. package/src/v2/shadcn/_reference/ai/ChatMessageContent.tsx +0 -40
  214. package/src/v2/shadcn/_reference/ai/parseInteractiveBlocks.ts +0 -142
  215. package/src/v2/shadcn/_reference/auth/AuthLayout.tsx +0 -55
  216. package/src/v2/shadcn/_reference/auth/CreatePasswordForm.tsx +0 -285
  217. package/src/v2/shadcn/_reference/auth/CreatePasswordPanel.tsx +0 -20
  218. package/src/v2/shadcn/_reference/auth/LoginFooter.tsx +0 -14
  219. package/src/v2/shadcn/_reference/auth/LoginForm.tsx +0 -205
  220. package/src/v2/shadcn/_reference/auth/LoginPanel.tsx +0 -41
  221. package/src/v2/shadcn/_reference/auth/ResetPasswordForm.tsx +0 -102
  222. package/src/v2/shadcn/_reference/auth/ResetPasswordPanel.tsx +0 -20
  223. package/src/v2/shadcn/_reference/auth/VerifyEmailForm.tsx +0 -95
  224. package/src/v2/shadcn/_reference/auth/VerifyEmailPanel.tsx +0 -20
  225. package/src/v2/shadcn/_reference/email/EmailAttachment.tsx +0 -119
  226. package/src/v2/shadcn/_reference/email/EmailAutomation.tsx +0 -92
  227. package/src/v2/shadcn/_reference/email/EmailPlaceholders.tsx +0 -64
  228. package/src/v2/shadcn/_reference/email/UnlayerEmailEditor.tsx +0 -41
  229. package/src/v2/shadcn/_reference/email/emailTemplateData.ts +0 -53
  230. package/src/v2/shadcn/_reference/emptyStateIcons.tsx +0 -103
  231. package/src/v2/shadcn/_reference/games/MazeGame.tsx +0 -394
  232. package/src/v2/shadcn/_reference/games/RunnerGame.tsx +0 -497
  233. package/src/v2/shadcn/_reference/logos/BookedLogoFull.tsx +0 -36
  234. package/src/v2/shadcn/_reference/logos/BookedLogoMark.tsx +0 -31
  235. package/src/v2/shadcn/_reference/logos/BookedLogoNew.tsx +0 -36
  236. package/src/v2/shadcn/_reference/pricing/DynamicPricingRulesEditor.tsx +0 -401
  237. package/src/v2/shadcn/_reference/pricing/DynamicPricingTierCard.tsx +0 -77
  238. package/src/v2/shadcn/_reference/pricing/DynamicPricingTiersList.tsx +0 -218
  239. package/src/v2/shadcn/_reference/pricing/PricingCalendar.tsx +0 -810
  240. package/src/v2/shadcn/_reference/pricing/PricingPeriodCard.tsx +0 -152
  241. package/src/v2/shadcn/_reference/pricing/PricingPeriodForm.tsx +0 -377
  242. package/src/v2/shadcn/_reference/pricing/PricingPeriodsList.tsx +0 -213
  243. package/src/v2/shadcn/_reference/pricing/getRuleSummary.ts +0 -39
  244. package/src/v2/shadcn/_reference/products/AvailabilityRulesSection.tsx +0 -184
  245. package/src/v2/shadcn/_reference/products/AvailabilitySection.tsx +0 -677
  246. package/src/v2/shadcn/_reference/products/BookingTypeConfigOptions.tsx +0 -40
  247. package/src/v2/shadcn/_reference/products/CapacityPeriodsSection.tsx +0 -238
  248. package/src/v2/shadcn/_reference/products/DynamicPricingTiersSection.tsx +0 -131
  249. package/src/v2/shadcn/_reference/products/GiftCardOrdersTab.tsx +0 -192
  250. package/src/v2/shadcn/_reference/products/GiftCardSettings.tsx +0 -342
  251. package/src/v2/shadcn/_reference/products/PackageProductsSection.tsx +0 -322
  252. package/src/v2/shadcn/_reference/products/PricingSection.tsx +0 -173
  253. package/src/v2/shadcn/_reference/products/ProductTypeFields.tsx +0 -353
  254. package/src/v2/shadcn/_reference/products/ProductTypeIcon.tsx +0 -95
  255. package/src/v2/shadcn/_reference/products/VariablePricingSection.tsx +0 -140
  256. package/src/v2/shadcn/_reference/products/productTypeConfig.ts +0 -182
  257. package/src/v2/shadcn/_reference/shared/BackButton.tsx +0 -50
  258. package/src/v2/shadcn/_reference/shared/CancelConfirmationDialog.tsx +0 -18
  259. package/src/v2/shadcn/_reference/shared/ConfirmationDialog.tsx +0 -136
  260. package/src/v2/shadcn/_reference/shared/DeleteConfirmationDialog.tsx +0 -18
  261. package/src/v2/shadcn/_reference/shared/DeleteEntityPage.tsx +0 -221
  262. package/src/v2/shadcn/_reference/shared/SidebarIcons.tsx +0 -108
  263. package/src/v2/shadcn/_reference/shared/UnifiedSidebar.tsx +0 -722
  264. package/src/v2/shadcn/_reference/tables/BulkActionsBar.tsx +0 -68
  265. package/src/v2/shadcn/_reference/tables/DataTable.tsx +0 -221
  266. package/src/v2/shadcn/_reference/tables/TableControls.tsx +0 -94
  267. package/src/v2/shadcn/_reference/tables/index.ts +0 -3
  268. package/src/v2/shadcn/_reference/tables/types.ts +0 -79
  269. package/src/v2/shadcn/_reference/zones/LegacyZoneSettings.tsx +0 -299
  270. package/src/v2/shadcn/components/ui/accordion.stories.tsx +0 -63
  271. package/src/v2/shadcn/components/ui/accordion.tsx +0 -52
  272. package/src/v2/shadcn/components/ui/alert-dialog.stories.tsx +0 -44
  273. package/src/v2/shadcn/components/ui/alert-dialog.tsx +0 -104
  274. package/src/v2/shadcn/components/ui/alert.stories.tsx +0 -44
  275. package/src/v2/shadcn/components/ui/alert.tsx +0 -43
  276. package/src/v2/shadcn/components/ui/aspect-ratio.stories.tsx +0 -46
  277. package/src/v2/shadcn/components/ui/aspect-ratio.tsx +0 -5
  278. package/src/v2/shadcn/components/ui/avatar.stories.tsx +0 -39
  279. package/src/v2/shadcn/components/ui/avatar.tsx +0 -38
  280. package/src/v2/shadcn/components/ui/badge.stories.tsx +0 -17
  281. package/src/v2/shadcn/components/ui/badge.tsx +0 -30
  282. package/src/v2/shadcn/components/ui/breadcrumb.stories.tsx +0 -91
  283. package/src/v2/shadcn/components/ui/breadcrumb.tsx +0 -90
  284. package/src/v2/shadcn/components/ui/button.stories.tsx +0 -20
  285. package/src/v2/shadcn/components/ui/button.tsx +0 -60
  286. package/src/v2/shadcn/components/ui/calendar.stories.tsx +0 -61
  287. package/src/v2/shadcn/components/ui/calendar.tsx +0 -54
  288. package/src/v2/shadcn/components/ui/card.stories.tsx +0 -37
  289. package/src/v2/shadcn/components/ui/card.tsx +0 -43
  290. package/src/v2/shadcn/components/ui/carousel.stories.tsx +0 -92
  291. package/src/v2/shadcn/components/ui/carousel.tsx +0 -224
  292. package/src/v2/shadcn/components/ui/checkbox.scss +0 -38
  293. package/src/v2/shadcn/components/ui/checkbox.stories.tsx +0 -23
  294. package/src/v2/shadcn/components/ui/checkbox.tsx +0 -24
  295. package/src/v2/shadcn/components/ui/collapsible.stories.tsx +0 -59
  296. package/src/v2/shadcn/components/ui/collapsible.tsx +0 -9
  297. package/src/v2/shadcn/components/ui/command.stories.tsx +0 -70
  298. package/src/v2/shadcn/components/ui/command.tsx +0 -132
  299. package/src/v2/shadcn/components/ui/context-menu.stories.tsx +0 -72
  300. package/src/v2/shadcn/components/ui/context-menu.tsx +0 -178
  301. package/src/v2/shadcn/components/ui/dialog.stories.tsx +0 -67
  302. package/src/v2/shadcn/components/ui/dialog.tsx +0 -95
  303. package/src/v2/shadcn/components/ui/drawer.stories.tsx +0 -50
  304. package/src/v2/shadcn/components/ui/drawer.tsx +0 -87
  305. package/src/v2/shadcn/components/ui/dropdown-menu.stories.tsx +0 -73
  306. package/src/v2/shadcn/components/ui/dropdown-menu.tsx +0 -179
  307. package/src/v2/shadcn/components/ui/form.stories.tsx +0 -105
  308. package/src/v2/shadcn/components/ui/form.tsx +0 -129
  309. package/src/v2/shadcn/components/ui/hover-card.stories.tsx +0 -35
  310. package/src/v2/shadcn/components/ui/hover-card.tsx +0 -27
  311. package/src/v2/shadcn/components/ui/input-otp.stories.tsx +0 -72
  312. package/src/v2/shadcn/components/ui/input-otp.tsx +0 -61
  313. package/src/v2/shadcn/components/ui/input.stories.tsx +0 -16
  314. package/src/v2/shadcn/components/ui/input.tsx +0 -25
  315. package/src/v2/shadcn/components/ui/label.stories.tsx +0 -13
  316. package/src/v2/shadcn/components/ui/label.tsx +0 -17
  317. package/src/v2/shadcn/components/ui/menubar.stories.tsx +0 -86
  318. package/src/v2/shadcn/components/ui/menubar.tsx +0 -207
  319. package/src/v2/shadcn/components/ui/navigation-menu.stories.tsx +0 -68
  320. package/src/v2/shadcn/components/ui/navigation-menu.tsx +0 -120
  321. package/src/v2/shadcn/components/ui/pagination.stories.tsx +0 -78
  322. package/src/v2/shadcn/components/ui/pagination.tsx +0 -81
  323. package/src/v2/shadcn/components/ui/popover.stories.tsx +0 -44
  324. package/src/v2/shadcn/components/ui/popover.tsx +0 -29
  325. package/src/v2/shadcn/components/ui/progress.stories.tsx +0 -17
  326. package/src/v2/shadcn/components/ui/progress.tsx +0 -23
  327. package/src/v2/shadcn/components/ui/radio-card.stories.tsx +0 -68
  328. package/src/v2/shadcn/components/ui/radio-card.tsx +0 -52
  329. package/src/v2/shadcn/components/ui/radio-group.stories.tsx +0 -77
  330. package/src/v2/shadcn/components/ui/radio-group.tsx +0 -35
  331. package/src/v2/shadcn/components/ui/scroll-area.stories.tsx +0 -56
  332. package/src/v2/shadcn/components/ui/scroll-area.tsx +0 -38
  333. package/src/v2/shadcn/components/ui/select.stories.tsx +0 -60
  334. package/src/v2/shadcn/components/ui/select.tsx +0 -148
  335. package/src/v2/shadcn/components/ui/separator.stories.tsx +0 -30
  336. package/src/v2/shadcn/components/ui/separator.tsx +0 -20
  337. package/src/v2/shadcn/components/ui/sheet.stories.tsx +0 -115
  338. package/src/v2/shadcn/components/ui/sheet.tsx +0 -107
  339. package/src/v2/shadcn/components/ui/sidebar.stories.tsx +0 -167
  340. package/src/v2/shadcn/components/ui/sidebar.tsx +0 -637
  341. package/src/v2/shadcn/components/ui/skeleton.stories.tsx +0 -36
  342. package/src/v2/shadcn/components/ui/skeleton.tsx +0 -7
  343. package/src/v2/shadcn/components/ui/slider.stories.tsx +0 -16
  344. package/src/v2/shadcn/components/ui/slider.tsx +0 -23
  345. package/src/v2/shadcn/components/ui/switch.scss +0 -63
  346. package/src/v2/shadcn/components/ui/switch.stories.tsx +0 -23
  347. package/src/v2/shadcn/components/ui/switch.tsx +0 -24
  348. package/src/v2/shadcn/components/ui/table-pagination.stories.tsx +0 -81
  349. package/src/v2/shadcn/components/ui/table-pagination.tsx +0 -61
  350. package/src/v2/shadcn/components/ui/table.stories.tsx +0 -40
  351. package/src/v2/shadcn/components/ui/table.tsx +0 -72
  352. package/src/v2/shadcn/components/ui/tabs.stories.tsx +0 -85
  353. package/src/v2/shadcn/components/ui/tabs.tsx +0 -53
  354. package/src/v2/shadcn/components/ui/textarea.stories.tsx +0 -15
  355. package/src/v2/shadcn/components/ui/textarea.tsx +0 -21
  356. package/src/v2/shadcn/components/ui/toast.stories.tsx +0 -77
  357. package/src/v2/shadcn/components/ui/toast.tsx +0 -111
  358. package/src/v2/shadcn/components/ui/toaster.stories.tsx +0 -46
  359. package/src/v2/shadcn/components/ui/toaster.tsx +0 -24
  360. package/src/v2/shadcn/components/ui/toggle-group.stories.tsx +0 -95
  361. package/src/v2/shadcn/components/ui/toggle-group.tsx +0 -49
  362. package/src/v2/shadcn/components/ui/toggle.stories.tsx +0 -18
  363. package/src/v2/shadcn/components/ui/toggle.tsx +0 -37
  364. package/src/v2/shadcn/components/ui/tooltip.stories.tsx +0 -57
  365. package/src/v2/shadcn/components/ui/tooltip.tsx +0 -28
  366. package/src/v2/shadcn/components/ui/use-toast.ts +0 -3
  367. package/src/v2/shadcn/hooks/use-mobile.tsx +0 -19
  368. package/src/v2/shadcn/hooks/use-toast.ts +0 -184
  369. package/src/v2/shadcn/index.ts +0 -76
  370. package/src/v2/shadcn/lib/utils.ts +0 -6
  371. package/src/v2/shadcn/styles/globals.css +0 -112
@@ -1,331 +0,0 @@
1
- import React from 'react';
2
-
3
- interface StyleGuideContentProps {
4
- typographyScale: Array<{
5
- name: string;
6
- size: string;
7
- weight: string;
8
- lineHeight: string;
9
- letterSpacing: string;
10
- fontFamily: string;
11
- class: string;
12
- }>;
13
- baseColors: Array<{
14
- name: string;
15
- prefix: string;
16
- shades: Array<{ value: string; hex: string }>;
17
- }>;
18
- mainColors: Array<{
19
- category: string;
20
- tokens: Array<{ name: string; maps: string; hex: string }>;
21
- }>;
22
- semanticColors: Array<{
23
- name: string;
24
- tokens: Array<{ name: string; maps: string; hex: string }>;
25
- }>;
26
- mappedColors: {
27
- label: string[];
28
- surface: string[];
29
- border: string[];
30
- fill: string[];
31
- gradient: string[];
32
- };
33
- gradientInfo: {
34
- light: Array<{ stop: string; maps: string; hex: string }>;
35
- dark: Array<{ stop: string; maps: string; hex: string }>;
36
- };
37
- customIcons?: {
38
- navigation: Array<{ name: string; file: string; usage: string }>;
39
- user: Array<{ name: string; file: string; usage: string }>;
40
- interface: Array<{ name: string; file: string; usage: string }>;
41
- theme: Array<{ name: string; file: string; usage: string }>;
42
- branding: Array<{ name: string; file: string; usage: string }>;
43
- };
44
- }
45
-
46
- const StyleGuideContent: React.FC<StyleGuideContentProps> = ({
47
- typographyScale,
48
- baseColors,
49
- mainColors,
50
- semanticColors,
51
- mappedColors,
52
- gradientInfo,
53
- customIcons,
54
- }) => {
55
- return (
56
- <>
57
- {/* Anchor Navigation */}
58
- <div className="flex items-start gap-4 self-stretch py-4 px-4 bg-surface-secondary rounded-lg sticky top-14 z-10">
59
- <a href="#icons" className="text-[13px] font-semibold text-label-secondary hover:text-label-primary transition-colors">
60
- Icons
61
- </a>
62
- <span className="text-label-secondary">•</span>
63
- <a href="#typography" className="text-[13px] font-semibold text-label-secondary hover:text-label-primary transition-colors">
64
- Typography
65
- </a>
66
- <span className="text-label-secondary">•</span>
67
- <a href="#base-colors" className="text-[13px] font-semibold text-label-secondary hover:text-label-primary transition-colors">
68
- Base Colors
69
- </a>
70
- <span className="text-label-secondary">•</span>
71
- <a href="#main-colors" className="text-[13px] font-semibold text-label-secondary hover:text-label-primary transition-colors">
72
- Main Colors
73
- </a>
74
- <span className="text-label-secondary">•</span>
75
- <a href="#semantic-colors" className="text-[13px] font-semibold text-label-secondary hover:text-label-primary transition-colors">
76
- Semantic Colors
77
- </a>
78
- <span className="text-label-secondary">•</span>
79
- <a href="#mapped-colors" className="text-[13px] font-semibold text-label-secondary hover:text-label-primary transition-colors">
80
- Mapped Colors
81
- </a>
82
- </div>
83
-
84
- {/* Icons Section */}
85
- {customIcons && (
86
- <div id="icons" className="flex flex-col gap-4 self-stretch">
87
- <h2 className="text-label-primary text-xl font-semibold leading-6">Custom Icon System</h2>
88
- <p className="text-label-secondary text-sm">
89
- Custom SVG icons designed specifically for this application. These icons maintain consistent sizing and styling across the interface.
90
- </p>
91
-
92
- {Object.entries(customIcons).map(([category, icons]) => (
93
- <div key={category} className="flex flex-col gap-3">
94
- <h3 className="text-label-primary text-base font-semibold capitalize">{category} Icons</h3>
95
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3">
96
- {icons.map((icon) => (
97
- <div key={icon.name} className="flex items-center gap-4 p-4 bg-surface-secondary rounded-lg">
98
- <div className="w-12 h-12 flex items-center justify-center bg-surface-primary rounded-lg">
99
- <img
100
- src={`/src/assets/${icon.file}`}
101
- alt={icon.name}
102
- className="w-8 h-8"
103
- />
104
- </div>
105
- <div className="flex-1">
106
- <div className="text-label-primary font-semibold text-sm">{icon.name}</div>
107
- <div className="text-label-secondary text-xs mt-1">{icon.usage}</div>
108
- <div className="text-label-tertiary text-xs font-mono mt-1">{icon.file}</div>
109
- </div>
110
- </div>
111
- ))}
112
- </div>
113
- </div>
114
- ))}
115
- </div>
116
- )}
117
-
118
- {/* Typography Section */}
119
- <div id="typography" className="flex flex-col gap-4 self-stretch">
120
- <h2 className="text-label-primary text-xl font-semibold leading-6">Typography Scale</h2>
121
- <div className="flex flex-col gap-3">
122
- {typographyScale.map((type) => (
123
- <div key={type.name} className="flex items-center gap-4 p-4 bg-surface-secondary rounded-lg">
124
- <div className="flex-1 min-w-[200px]">
125
- <div className="text-label-primary font-semibold text-sm">{type.name}</div>
126
- <div className="text-label-secondary text-xs mt-1">
127
- {type.size} / {type.weight} / {type.lineHeight}
128
- </div>
129
- <div className="text-label-secondary text-xs mt-1">
130
- <strong>Family:</strong> {type.fontFamily}
131
- </div>
132
- <div className="text-label-secondary text-xs">
133
- <strong>Style:</strong> normal / <strong>Spacing:</strong> {type.letterSpacing}
134
- </div>
135
- </div>
136
- <div className="flex-1">
137
- <div className={type.class}>The quick brown fox</div>
138
- </div>
139
- </div>
140
- ))}
141
- </div>
142
- </div>
143
-
144
- {/* Base Colors Section */}
145
- <div id="base-colors" className="flex flex-col gap-4 self-stretch">
146
- <h2 className="text-label-primary text-xl font-semibold leading-6">Base Colors</h2>
147
- <div className="grid grid-cols-1 gap-4">
148
- {baseColors.map((color) => (
149
- <div key={color.name} className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
150
- <h3 className="text-label-primary font-semibold text-sm mb-2">{color.name}</h3>
151
- <div className="grid grid-cols-5 gap-2 max-sm:grid-cols-2">
152
- {color.shades.map((shade) => (
153
- <div key={shade.value} className="flex flex-col gap-2">
154
- <div
155
- className="h-16 rounded border border-border-primary"
156
- style={{ backgroundColor: shade.hex }}
157
- />
158
- <div className="text-label-secondary text-xs">
159
- <div className="font-semibold">{color.prefix}-{shade.value}</div>
160
- <code className="text-[10px] text-label-secondary font-mono">
161
- {shade.hex}
162
- </code>
163
- </div>
164
- </div>
165
- ))}
166
- </div>
167
- </div>
168
- ))}
169
- </div>
170
- </div>
171
-
172
- {/* Main Colors Section */}
173
- <div id="main-colors" className="flex flex-col gap-4 self-stretch">
174
- <h2 className="text-label-primary text-xl font-semibold leading-6">Main Colors (Semantic Names)</h2>
175
-
176
- {mainColors.map((colorGroup) => (
177
- <div key={colorGroup.category} className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
178
- <h3 className="text-label-primary font-semibold text-sm mb-2">{colorGroup.category}</h3>
179
- <div className="grid grid-cols-4 gap-2 max-sm:grid-cols-2">
180
- {colorGroup.tokens.map((token) => (
181
- <div key={token.name} className="flex flex-col gap-2">
182
- <div
183
- className="h-16 rounded border border-border-primary"
184
- style={{ backgroundColor: token.hex }}
185
- />
186
- <div className="text-label-secondary text-xs">
187
- <div className="font-semibold">{colorGroup.category.toLowerCase()}-{token.name}</div>
188
- <div className="text-[10px]">→ {token.maps}</div>
189
- <code className="text-[10px] text-label-secondary font-mono">
190
- {token.hex}
191
- </code>
192
- </div>
193
- </div>
194
- ))}
195
- </div>
196
- </div>
197
- ))}
198
- </div>
199
-
200
- {/* Semantic Colors Section */}
201
- <div id="semantic-colors" className="flex flex-col gap-4 self-stretch">
202
- <h2 className="text-label-primary text-xl font-semibold leading-6">Semantic Theme Colors</h2>
203
- {semanticColors.map((semantic) => (
204
- <div key={semantic.name} className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
205
- <h3 className="text-label-primary font-semibold text-sm mb-2">{semantic.name}</h3>
206
- <div className="grid grid-cols-4 gap-2 max-sm:grid-cols-2">
207
- {semantic.tokens.map((token) => (
208
- <div key={token.name} className="flex flex-col gap-2">
209
- <div
210
- className="h-16 rounded border border-border-primary"
211
- style={{ backgroundColor: token.hex }}
212
- />
213
- <div className="text-label-secondary text-xs">
214
- <div className="font-semibold">{semantic.name.toLowerCase()}-{token.name}</div>
215
- <div className="text-[10px]">→ {token.maps}</div>
216
- <code className="text-[10px] text-label-secondary font-mono">
217
- {token.hex}
218
- </code>
219
- </div>
220
- </div>
221
- ))}
222
- </div>
223
- </div>
224
- ))}
225
- </div>
226
-
227
- {/* Mapped Colors Section */}
228
- <div id="mapped-colors" className="flex flex-col gap-4 self-stretch">
229
- <h2 className="text-label-primary text-xl font-semibold leading-6">Mapped Colors</h2>
230
-
231
- {/* Label Tokens */}
232
- <div className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
233
- <h3 className="text-label-primary font-semibold text-sm mb-2">Label Tokens</h3>
234
- <div className="grid grid-cols-3 gap-2 max-sm:grid-cols-1">
235
- {mappedColors.label.map((token) => (
236
- <div key={token} className="flex items-center gap-2 p-2 bg-surface-primary rounded border border-border-primary">
237
- <div className={`w-6 h-6 rounded border border-border-primary flex-shrink-0`} style={{ backgroundColor: `var(--label-${token})` }} />
238
- <code className="text-xs text-label-primary font-mono">label-{token}</code>
239
- </div>
240
- ))}
241
- </div>
242
- </div>
243
-
244
- {/* Surface Tokens */}
245
- <div className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
246
- <h3 className="text-label-primary font-semibold text-sm mb-2">Surface Tokens</h3>
247
- <div className="grid grid-cols-3 gap-2 max-sm:grid-cols-1">
248
- {mappedColors.surface.map((token) => (
249
- <div key={token} className="flex items-center gap-2 p-2 bg-surface-primary rounded border border-border-primary">
250
- <div className={`w-6 h-6 rounded border border-border-primary flex-shrink-0 bg-surface-${token}`} />
251
- <code className="text-xs text-label-primary font-mono">surface-{token}</code>
252
- </div>
253
- ))}
254
- </div>
255
- </div>
256
-
257
- {/* Border Tokens */}
258
- <div className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
259
- <h3 className="text-label-primary font-semibold text-sm mb-2">Border Tokens</h3>
260
- <div className="grid grid-cols-3 gap-2 max-sm:grid-cols-1">
261
- {mappedColors.border.map((token) => (
262
- <div key={token} className="flex items-center gap-2 p-2 bg-surface-primary rounded border border-border-primary">
263
- <div className={`w-6 h-6 rounded flex-shrink-0 border-2`} style={{ borderColor: `var(--border-${token})` }} />
264
- <code className="text-xs text-label-primary font-mono">border-{token}</code>
265
- </div>
266
- ))}
267
- </div>
268
- </div>
269
-
270
- {/* Fill Tokens */}
271
- <div className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
272
- <h3 className="text-label-primary font-semibold text-sm mb-2">Fill Tokens</h3>
273
- <div className="grid grid-cols-3 gap-2 max-sm:grid-cols-1">
274
- {mappedColors.fill.map((token) => (
275
- <div key={token} className="flex items-center gap-2 p-2 bg-surface-primary rounded border border-border-primary">
276
- <div className={`w-6 h-6 rounded border border-border-primary flex-shrink-0`} style={{ backgroundColor: `var(--fill-${token})` }} />
277
- <code className="text-xs text-label-primary font-mono">fill-{token}</code>
278
- </div>
279
- ))}
280
- </div>
281
- </div>
282
-
283
- {/* Gradients - Light Mode */}
284
- <div className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
285
- <h3 className="text-label-primary font-semibold text-sm mb-2">Gradient Stops (Light Mode)</h3>
286
- <div className="grid grid-cols-3 gap-3 max-sm:grid-cols-1">
287
- {gradientInfo.light.map((info) => (
288
- <div key={info.stop} className="flex items-center gap-3 p-3 bg-surface-primary rounded border border-border-primary">
289
- <div
290
- className="w-12 h-12 rounded border border-border-primary flex-shrink-0"
291
- style={{ backgroundColor: info.hex }}
292
- />
293
- <div className="flex-1 min-w-0">
294
- <div className="text-label-primary font-semibold text-xs truncate">gradient-{info.stop}</div>
295
- <div className="text-label-secondary text-[10px] truncate">→ {info.maps}</div>
296
- <code className="text-[10px] text-label-secondary font-mono">
297
- {info.hex}
298
- </code>
299
- </div>
300
- </div>
301
- ))}
302
- </div>
303
- </div>
304
-
305
- {/* Gradients - Dark Mode */}
306
- <div className="flex flex-col gap-2 p-4 bg-surface-secondary rounded-lg">
307
- <h3 className="text-label-primary font-semibold text-sm mb-2">Gradient Stops (Dark Mode)</h3>
308
- <div className="grid grid-cols-3 gap-3 max-sm:grid-cols-1">
309
- {gradientInfo.dark.map((info) => (
310
- <div key={info.stop} className="flex items-center gap-3 p-3 bg-surface-primary rounded border border-border-primary">
311
- <div
312
- className="w-12 h-12 rounded border border-border-primary flex-shrink-0"
313
- style={{ backgroundColor: info.hex }}
314
- />
315
- <div className="flex-1 min-w-0">
316
- <div className="text-label-primary font-semibold text-xs truncate">gradient-{info.stop}</div>
317
- <div className="text-label-secondary text-[10px] truncate">→ {info.maps}</div>
318
- <code className="text-[10px] text-label-secondary font-mono">
319
- {info.hex}
320
- </code>
321
- </div>
322
- </div>
323
- ))}
324
- </div>
325
- </div>
326
- </div>
327
- </>
328
- );
329
- };
330
-
331
- export default StyleGuideContent;
@@ -1,126 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { IconCross } from '../../icons';
3
-
4
- export interface MenuItem {
5
- label: string;
6
- onClick: () => void;
7
- variant?: 'default' | 'danger';
8
- }
9
-
10
- interface TableActionMenuProps {
11
- items: MenuItem[];
12
- }
13
-
14
- /**
15
- * Reusable circular action button with the soft-action surface and fill-action icon tint.
16
- * Used standalone (with `icon` + `onClick`) or as the trigger for TableActionMenu.
17
- */
18
- export const ActionButton: React.FC<{
19
- icon: React.ReactNode;
20
- onClick: () => void;
21
- className?: string;
22
- }> = ({ icon, onClick, className = '' }) => (
23
- <button
24
- onClick={onClick}
25
- className={`w-8 h-8 relative flex items-center justify-center hover:opacity-80 transition-opacity flex-shrink-0 ${className}`}
26
- >
27
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" className="absolute inset-0">
28
- <circle cx="16" cy="16" r="16" className="fill-surface-action-soft" />
29
- </svg>
30
- <span className="relative z-10 text-fill-action flex items-center justify-center">
31
- {icon}
32
- </span>
33
- </button>
34
- );
35
-
36
- const ThreeDotsIcon = () => (
37
- <svg width="18" height="4" viewBox="0 0 18 4" fill="none">
38
- <path d="M2 0C3.10457 0 4 0.895431 4 2C4 3.10457 3.10457 4 2 4C0.895431 4 0 3.10457 0 2C0 0.895431 0.895431 0 2 0ZM9 0C10.1046 0 11 0.895431 11 2C11 3.10457 10.1046 4 9 4C7.89543 4 7 3.10457 7 2C7 0.895431 7.89543 0 9 0ZM16 0C17.1046 0 18 0.895431 18 2C18 3.10457 17.1046 4 16 4C14.8954 4 14 3.10457 14 2C14 0.895431 14.8954 0 16 0Z" className="fill-fill-action" />
39
- </svg>
40
- );
41
-
42
- const TableActionMenu: React.FC<TableActionMenuProps> = ({ items }) => {
43
- const [isMenuOpen, setIsMenuOpen] = useState(false);
44
- const [menuPosition, setMenuPosition] = useState({ top: 0, right: 0, openUpward: false });
45
- const buttonRef = React.useRef<HTMLButtonElement>(null);
46
-
47
- const handleToggle = () => {
48
- if (!isMenuOpen && buttonRef.current) {
49
- const rect = buttonRef.current.getBoundingClientRect();
50
- const spacing = 8;
51
-
52
- const estimatedMenuHeight = items.length * 40 + 16;
53
- const spaceBelow = window.innerHeight - rect.bottom;
54
- const spaceAbove = rect.top;
55
-
56
- const shouldOpenUpward = spaceBelow < estimatedMenuHeight && spaceAbove > spaceBelow;
57
-
58
- setMenuPosition({
59
- top: shouldOpenUpward ? rect.top - spacing : rect.bottom + spacing,
60
- right: window.innerWidth - rect.right,
61
- openUpward: shouldOpenUpward
62
- });
63
- }
64
- setIsMenuOpen(!isMenuOpen);
65
- };
66
-
67
- return (
68
- <div className="relative">
69
- <button
70
- ref={buttonRef}
71
- onClick={handleToggle}
72
- className="w-8 h-8 relative flex items-center justify-center hover:opacity-80 transition-opacity flex-shrink-0"
73
- >
74
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" className="absolute inset-0">
75
- <circle cx="16" cy="16" r="16" className="fill-surface-action-soft" />
76
- </svg>
77
- {isMenuOpen ? (
78
- <IconCross size={16} className="relative z-10 text-fill-action" />
79
- ) : (
80
- <span className="relative z-10">
81
- <ThreeDotsIcon />
82
- </span>
83
- )}
84
- </button>
85
-
86
- {/* Dropdown Menu */}
87
- {isMenuOpen && (
88
- <>
89
- <div
90
- className="fixed inset-0 z-40"
91
- onClick={() => setIsMenuOpen(false)}
92
- />
93
- <div
94
- className="fixed min-w-[160px] max-w-[240px] w-auto bg-surface-primary rounded-[16px] overflow-hidden z-50 animate-scale-in"
95
- style={{
96
- boxShadow: '0 4px 12px rgba(20, 33, 90, 0.2)',
97
- [menuPosition.openUpward ? 'bottom' : 'top']: menuPosition.openUpward
98
- ? `${window.innerHeight - menuPosition.top}px`
99
- : `${menuPosition.top}px`,
100
- right: `${menuPosition.right}px`
101
- }}
102
- >
103
- {items.map((item, index) => (
104
- <button
105
- key={index}
106
- onClick={() => {
107
- item.onClick();
108
- setIsMenuOpen(false);
109
- }}
110
- className={`w-full text-left px-4 py-3 text-[13px] font-medium transition-colors whitespace-nowrap ${
111
- item.variant === 'danger'
112
- ? 'text-label-danger hover:bg-surface-danger-soft-hover'
113
- : 'text-label-primary hover:bg-surface-primary-hover'
114
- }`}
115
- >
116
- {item.label}
117
- </button>
118
- ))}
119
- </div>
120
- </>
121
- )}
122
- </div>
123
- );
124
- };
125
-
126
- export default TableActionMenu;
@@ -1,119 +0,0 @@
1
- import { createContext, useContext, useEffect, useState, useCallback } from "react"
2
- import { supabase } from "@/integrations/supabase/client"
3
-
4
- type Theme = "light" | "dark" | "system"
5
-
6
- type ThemeProviderProps = {
7
- children: React.ReactNode
8
- defaultTheme?: Theme
9
- storageKey?: string
10
- }
11
-
12
- type ThemeProviderState = {
13
- theme: Theme
14
- setTheme: (theme: Theme) => void
15
- }
16
-
17
- const initialState: ThemeProviderState = {
18
- theme: "system",
19
- setTheme: () => null,
20
- }
21
-
22
- const ThemeProviderContext = createContext<ThemeProviderState>(initialState)
23
-
24
- export function ThemeProvider({
25
- children,
26
- defaultTheme = "system",
27
- storageKey = "ui-theme",
28
- ...props
29
- }: ThemeProviderProps) {
30
- const [theme, setThemeState] = useState<Theme>(
31
- () => (localStorage.getItem(storageKey) as Theme) || defaultTheme
32
- )
33
-
34
- // Sync theme from database on auth
35
- useEffect(() => {
36
- const loadThemeFromDb = async () => {
37
- const { data: { user } } = await supabase.auth.getUser()
38
- if (!user) return
39
-
40
- const { data } = await supabase
41
- .from('profiles')
42
- .select('theme_preference')
43
- .eq('id', user.id)
44
- .single()
45
-
46
- if (data?.theme_preference && data.theme_preference !== theme) {
47
- const dbTheme = data.theme_preference as Theme
48
- localStorage.setItem(storageKey, dbTheme)
49
- setThemeState(dbTheme)
50
- }
51
- }
52
-
53
- loadThemeFromDb()
54
-
55
- const { data: { subscription } } = supabase.auth.onAuthStateChange((event) => {
56
- if (event === 'SIGNED_IN') {
57
- loadThemeFromDb()
58
- }
59
- })
60
-
61
- return () => subscription.unsubscribe()
62
- }, [])
63
-
64
- // Apply theme to DOM
65
- useEffect(() => {
66
- const root = window.document.documentElement
67
-
68
- const applyTheme = (resolvedTheme: "light" | "dark") => {
69
- root.classList.remove("light", "dark")
70
- root.classList.add(resolvedTheme)
71
- }
72
-
73
- if (theme === "system") {
74
- const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)")
75
- const systemTheme = mediaQuery.matches ? "dark" : "light"
76
- applyTheme(systemTheme)
77
-
78
- const handleChange = (e: MediaQueryListEvent) => {
79
- applyTheme(e.matches ? "dark" : "light")
80
- }
81
-
82
- mediaQuery.addEventListener("change", handleChange)
83
- return () => mediaQuery.removeEventListener("change", handleChange)
84
- } else {
85
- applyTheme(theme)
86
- }
87
- }, [theme])
88
-
89
- const setTheme = useCallback(async (newTheme: Theme) => {
90
- localStorage.setItem(storageKey, newTheme)
91
- setThemeState(newTheme)
92
-
93
- // Persist to database
94
- const { data: { user } } = await supabase.auth.getUser()
95
- if (user) {
96
- await supabase
97
- .from('profiles')
98
- .update({ theme_preference: newTheme })
99
- .eq('id', user.id)
100
- }
101
- }, [storageKey])
102
-
103
- const value = { theme, setTheme }
104
-
105
- return (
106
- <ThemeProviderContext.Provider {...props} value={value}>
107
- {children}
108
- </ThemeProviderContext.Provider>
109
- )
110
- }
111
-
112
- export const useTheme = () => {
113
- const context = useContext(ThemeProviderContext)
114
-
115
- if (context === undefined)
116
- throw new Error("useTheme must be used within a ThemeProvider")
117
-
118
- return context
119
- }
@@ -1,73 +0,0 @@
1
- import React from 'react';
2
- import { useTheme } from './ThemeProvider';
3
- import { RadioGroup, RadioGroupItem } from './ui/radio-group';
4
- import { Label } from './ui/label';
5
- import { LightModeIcon, DarkModeIcon, SystemModeIcon } from './icons/ThemeIcons';
6
-
7
- const ThemeSettings: React.FC = () => {
8
- const { theme, setTheme } = useTheme();
9
-
10
- return (
11
- <div className="flex flex-col gap-4 p-2 self-stretch bg-surface-primary rounded-lg">
12
- <h3 className="text-label-primary text-xl font-semibold px-2">Theme</h3>
13
-
14
- <RadioGroup value={theme} onValueChange={(value) => setTheme(value as "light" | "dark" | "system")} className="flex flex-col gap-2">
15
- <Label
16
- htmlFor="light"
17
- className="flex p-2 items-center gap-3 rounded-lg cursor-pointer hover:bg-surface-primary-hover transition-colors"
18
- >
19
- <div className="flex flex-col items-center justify-center gap-2 px-2 pb-2 pt-1 bg-surface-secondary rounded flex-shrink-0 w-[60px]">
20
- <LightModeIcon />
21
- <div className="flex items-center justify-center w-full">
22
- <RadioGroupItem value="light" id="light" />
23
- </div>
24
- </div>
25
- <div className="flex flex-col flex-1 min-w-0">
26
- <span className="text-label-primary text-base font-semibold leading-tight">Light Mode</span>
27
- <p className="text-label-secondary text-sm font-normal leading-normal">
28
- Adopt a brighter, lighter theme.
29
- </p>
30
- </div>
31
- </Label>
32
-
33
- <Label
34
- htmlFor="dark"
35
- className="flex p-2 items-center gap-3 rounded-lg cursor-pointer hover:bg-surface-primary-hover transition-colors"
36
- >
37
- <div className="flex flex-col items-center justify-center gap-2 px-2 pb-2 pt-1 bg-surface-secondary rounded flex-shrink-0 w-[60px]">
38
- <DarkModeIcon />
39
- <div className="flex items-center justify-center w-full">
40
- <RadioGroupItem value="dark" id="dark" />
41
- </div>
42
- </div>
43
- <div className="flex flex-col flex-1 min-w-0">
44
- <span className="text-label-primary text-base font-semibold leading-tight">Dark Mode</span>
45
- <p className="text-label-secondary text-sm font-normal leading-normal">
46
- Adopt a darker, richer theme.
47
- </p>
48
- </div>
49
- </Label>
50
-
51
- <Label
52
- htmlFor="system"
53
- className="flex p-2 items-center gap-3 rounded-lg cursor-pointer hover:bg-surface-primary-hover transition-colors"
54
- >
55
- <div className="flex flex-col items-center justify-center gap-2 px-2 pb-2 pt-1 bg-surface-secondary rounded flex-shrink-0 w-[60px]">
56
- <SystemModeIcon />
57
- <div className="flex items-center justify-center w-full">
58
- <RadioGroupItem value="system" id="system" />
59
- </div>
60
- </div>
61
- <div className="flex flex-col flex-1 min-w-0">
62
- <span className="text-label-primary text-base font-semibold leading-tight">System</span>
63
- <p className="text-label-secondary text-sm font-normal leading-normal">
64
- Switch theme based on device settings.
65
- </p>
66
- </div>
67
- </Label>
68
- </RadioGroup>
69
- </div>
70
- );
71
- };
72
-
73
- export default ThemeSettings;