@fayz-ai/admin 0.10.0

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 (557) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/CommandPalette-2AL327XQ.js +258 -0
  4. package/dist/CommandPalette-2AL327XQ.js.map +1 -0
  5. package/dist/ImportWizard-CISHGNQC.js +3 -0
  6. package/dist/ImportWizard-CISHGNQC.js.map +1 -0
  7. package/dist/ScheduleEditor-BSFF7LME.js +1040 -0
  8. package/dist/ScheduleEditor-BSFF7LME.js.map +1 -0
  9. package/dist/SubscriptionPage-NLZAZO4P.js +7 -0
  10. package/dist/SubscriptionPage-NLZAZO4P.js.map +1 -0
  11. package/dist/access/context.d.ts +47 -0
  12. package/dist/access/context.d.ts.map +1 -0
  13. package/dist/access/headless.d.ts +21 -0
  14. package/dist/access/headless.d.ts.map +1 -0
  15. package/dist/access/index.d.ts +12 -0
  16. package/dist/access/index.d.ts.map +1 -0
  17. package/dist/access/limits-registry.d.ts +33 -0
  18. package/dist/access/limits-registry.d.ts.map +1 -0
  19. package/dist/access/module-nav.d.ts +15 -0
  20. package/dist/access/module-nav.d.ts.map +1 -0
  21. package/dist/access/resolver.d.ts +2 -0
  22. package/dist/access/resolver.d.ts.map +1 -0
  23. package/dist/access/types.d.ts +43 -0
  24. package/dist/access/types.d.ts.map +1 -0
  25. package/dist/access/upgrade-modal-store.d.ts +23 -0
  26. package/dist/access/upgrade-modal-store.d.ts.map +1 -0
  27. package/dist/app/AdminShell.d.ts +65 -0
  28. package/dist/app/AdminShell.d.ts.map +1 -0
  29. package/dist/app/LoginPage.d.ts +3 -0
  30. package/dist/app/LoginPage.d.ts.map +1 -0
  31. package/dist/app/admin-app.d.ts +23 -0
  32. package/dist/app/admin-app.d.ts.map +1 -0
  33. package/dist/app/config.d.ts +277 -0
  34. package/dist/app/config.d.ts.map +1 -0
  35. package/dist/app/core-entities.d.ts +25 -0
  36. package/dist/app/core-entities.d.ts.map +1 -0
  37. package/dist/app/derive-contract.d.ts +8 -0
  38. package/dist/app/derive-contract.d.ts.map +1 -0
  39. package/dist/app/nav-contributions.store.d.ts +17 -0
  40. package/dist/app/nav-contributions.store.d.ts.map +1 -0
  41. package/dist/app/routing.d.ts +10 -0
  42. package/dist/app/routing.d.ts.map +1 -0
  43. package/dist/app/scaffold.d.ts +17 -0
  44. package/dist/app/scaffold.d.ts.map +1 -0
  45. package/dist/billing/index.d.ts +5 -0
  46. package/dist/billing/index.d.ts.map +1 -0
  47. package/dist/billing/index.js +3 -0
  48. package/dist/billing/index.js.map +1 -0
  49. package/dist/billing/plan-badge.d.ts +17 -0
  50. package/dist/billing/plan-badge.d.ts.map +1 -0
  51. package/dist/billing/store.d.ts +40 -0
  52. package/dist/billing/store.d.ts.map +1 -0
  53. package/dist/chunk-5O2UJAQ7.js +534 -0
  54. package/dist/chunk-5O2UJAQ7.js.map +1 -0
  55. package/dist/chunk-PNAJODZM.js +315 -0
  56. package/dist/chunk-PNAJODZM.js.map +1 -0
  57. package/dist/chunk-RKXZ7RUG.js +20 -0
  58. package/dist/chunk-RKXZ7RUG.js.map +1 -0
  59. package/dist/chunk-TNTZHUL6.js +817 -0
  60. package/dist/chunk-TNTZHUL6.js.map +1 -0
  61. package/dist/chunk-UMRN6427.js +510 -0
  62. package/dist/chunk-UMRN6427.js.map +1 -0
  63. package/dist/chunk-VN5NTK26.js +36 -0
  64. package/dist/chunk-VN5NTK26.js.map +1 -0
  65. package/dist/chunk-VTEP2AQX.js +101 -0
  66. package/dist/chunk-VTEP2AQX.js.map +1 -0
  67. package/dist/chunk-YUHCC7JY.js +11 -0
  68. package/dist/chunk-YUHCC7JY.js.map +1 -0
  69. package/dist/components/RightRail.d.ts +8 -0
  70. package/dist/components/RightRail.d.ts.map +1 -0
  71. package/dist/components/auth/CenteredLogin.d.ts +13 -0
  72. package/dist/components/auth/CenteredLogin.d.ts.map +1 -0
  73. package/dist/components/auth/LoginForm.d.ts +12 -0
  74. package/dist/components/auth/LoginForm.d.ts.map +1 -0
  75. package/dist/components/auth/LoginPage.d.ts +15 -0
  76. package/dist/components/auth/LoginPage.d.ts.map +1 -0
  77. package/dist/components/auth/OAuthButtons.d.ts +10 -0
  78. package/dist/components/auth/OAuthButtons.d.ts.map +1 -0
  79. package/dist/components/auth/ProtectedRoute.d.ts +11 -0
  80. package/dist/components/auth/ProtectedRoute.d.ts.map +1 -0
  81. package/dist/components/auth/RecoveryForm.d.ts +9 -0
  82. package/dist/components/auth/RecoveryForm.d.ts.map +1 -0
  83. package/dist/components/auth/SignupForm.d.ts +10 -0
  84. package/dist/components/auth/SignupForm.d.ts.map +1 -0
  85. package/dist/components/auth/SplitLogin.d.ts +14 -0
  86. package/dist/components/auth/SplitLogin.d.ts.map +1 -0
  87. package/dist/components/auth/index.d.ts +7 -0
  88. package/dist/components/auth/index.d.ts.map +1 -0
  89. package/dist/components/billing/InvoiceList.d.ts +9 -0
  90. package/dist/components/billing/InvoiceList.d.ts.map +1 -0
  91. package/dist/components/billing/PlanSelector.d.ts +13 -0
  92. package/dist/components/billing/PlanSelector.d.ts.map +1 -0
  93. package/dist/components/billing/SoftLimitBanner.d.ts +5 -0
  94. package/dist/components/billing/SoftLimitBanner.d.ts.map +1 -0
  95. package/dist/components/billing/SubscriptionCard.d.ts +12 -0
  96. package/dist/components/billing/SubscriptionCard.d.ts.map +1 -0
  97. package/dist/components/billing/SubscriptionPage.d.ts +5 -0
  98. package/dist/components/billing/SubscriptionPage.d.ts.map +1 -0
  99. package/dist/components/billing/UpgradeModal.d.ts +3 -0
  100. package/dist/components/billing/UpgradeModal.d.ts.map +1 -0
  101. package/dist/components/billing/UpgradeOverlay.d.ts +15 -0
  102. package/dist/components/billing/UpgradeOverlay.d.ts.map +1 -0
  103. package/dist/components/billing/UpgradePrompt.d.ts +10 -0
  104. package/dist/components/billing/UpgradePrompt.d.ts.map +1 -0
  105. package/dist/components/billing/access-contract.d.ts +18 -0
  106. package/dist/components/billing/access-contract.d.ts.map +1 -0
  107. package/dist/components/billing/gates.d.ts +14 -0
  108. package/dist/components/billing/gates.d.ts.map +1 -0
  109. package/dist/components/billing/index.d.ts +15 -0
  110. package/dist/components/billing/index.d.ts.map +1 -0
  111. package/dist/components/billing/plan-feature.d.ts +11 -0
  112. package/dist/components/billing/plan-feature.d.ts.map +1 -0
  113. package/dist/components/chat/ChatAttachments.d.ts +23 -0
  114. package/dist/components/chat/ChatAttachments.d.ts.map +1 -0
  115. package/dist/components/chat/ChatComposer.d.ts +21 -0
  116. package/dist/components/chat/ChatComposer.d.ts.map +1 -0
  117. package/dist/components/chat/ChatConversation.d.ts +20 -0
  118. package/dist/components/chat/ChatConversation.d.ts.map +1 -0
  119. package/dist/components/chat/ChatFab.d.ts +17 -0
  120. package/dist/components/chat/ChatFab.d.ts.map +1 -0
  121. package/dist/components/chat/ChatHistory.d.ts +16 -0
  122. package/dist/components/chat/ChatHistory.d.ts.map +1 -0
  123. package/dist/components/chat/ChatMessages.d.ts +16 -0
  124. package/dist/components/chat/ChatMessages.d.ts.map +1 -0
  125. package/dist/components/chat/ChatSuggestions.d.ts +17 -0
  126. package/dist/components/chat/ChatSuggestions.d.ts.map +1 -0
  127. package/dist/components/chat/ConfirmActionCard.d.ts +19 -0
  128. package/dist/components/chat/ConfirmActionCard.d.ts.map +1 -0
  129. package/dist/components/chat/RecordChip.d.ts +12 -0
  130. package/dist/components/chat/RecordChip.d.ts.map +1 -0
  131. package/dist/components/chat/index.d.ts +4 -0
  132. package/dist/components/chat/index.d.ts.map +1 -0
  133. package/dist/components/chat/markdown.d.ts +5 -0
  134. package/dist/components/chat/markdown.d.ts.map +1 -0
  135. package/dist/components/connect/AddConnectorPanel.d.ts +32 -0
  136. package/dist/components/connect/AddConnectorPanel.d.ts.map +1 -0
  137. package/dist/components/connect/ConnectConsentPage.d.ts +12 -0
  138. package/dist/components/connect/ConnectConsentPage.d.ts.map +1 -0
  139. package/dist/components/connect/ConnectorDetail.d.ts +29 -0
  140. package/dist/components/connect/ConnectorDetail.d.ts.map +1 -0
  141. package/dist/components/connect/ConnectorMark.d.ts +20 -0
  142. package/dist/components/connect/ConnectorMark.d.ts.map +1 -0
  143. package/dist/components/connect/ConnectorRow.d.ts +33 -0
  144. package/dist/components/connect/ConnectorRow.d.ts.map +1 -0
  145. package/dist/components/connect/ConnectorsPanel.d.ts +40 -0
  146. package/dist/components/connect/ConnectorsPanel.d.ts.map +1 -0
  147. package/dist/components/connect/ConnectorsTab.d.ts +16 -0
  148. package/dist/components/connect/ConnectorsTab.d.ts.map +1 -0
  149. package/dist/components/connect/client-marks.d.ts +31 -0
  150. package/dist/components/connect/client-marks.d.ts.map +1 -0
  151. package/dist/components/connect/index.d.ts +12 -0
  152. package/dist/components/connect/index.d.ts.map +1 -0
  153. package/dist/components/connect/model.d.ts +151 -0
  154. package/dist/components/connect/model.d.ts.map +1 -0
  155. package/dist/components/connect/useConnectors.d.ts +24 -0
  156. package/dist/components/connect/useConnectors.d.ts.map +1 -0
  157. package/dist/components/layout/BottomNav.d.ts +24 -0
  158. package/dist/components/layout/BottomNav.d.ts.map +1 -0
  159. package/dist/components/layout/CommandPalette.d.ts +23 -0
  160. package/dist/components/layout/CommandPalette.d.ts.map +1 -0
  161. package/dist/components/layout/LocationSwitchOverlay.d.ts +3 -0
  162. package/dist/components/layout/LocationSwitchOverlay.d.ts.map +1 -0
  163. package/dist/components/layout/MockModeBanner.d.ts +3 -0
  164. package/dist/components/layout/MockModeBanner.d.ts.map +1 -0
  165. package/dist/components/layout/PrintChrome.d.ts +10 -0
  166. package/dist/components/layout/PrintChrome.d.ts.map +1 -0
  167. package/dist/components/layout/index.d.ts +6 -0
  168. package/dist/components/layout/index.d.ts.map +1 -0
  169. package/dist/components/notes/NotesPanel.d.ts +13 -0
  170. package/dist/components/notes/NotesPanel.d.ts.map +1 -0
  171. package/dist/components/notifications/ChangelogFeed.d.ts +8 -0
  172. package/dist/components/notifications/ChangelogFeed.d.ts.map +1 -0
  173. package/dist/components/notifications/NotificationBell.d.ts +9 -0
  174. package/dist/components/notifications/NotificationBell.d.ts.map +1 -0
  175. package/dist/components/notifications/NotificationInbox.d.ts +13 -0
  176. package/dist/components/notifications/NotificationInbox.d.ts.map +1 -0
  177. package/dist/components/notifications/ToastProvider.d.ts +2 -0
  178. package/dist/components/notifications/ToastProvider.d.ts.map +1 -0
  179. package/dist/components/notifications/index.d.ts +5 -0
  180. package/dist/components/notifications/index.d.ts.map +1 -0
  181. package/dist/components/organization/InviteMemberDialog.d.ts +10 -0
  182. package/dist/components/organization/InviteMemberDialog.d.ts.map +1 -0
  183. package/dist/components/organization/OrgInitializer.d.ts +7 -0
  184. package/dist/components/organization/OrgInitializer.d.ts.map +1 -0
  185. package/dist/components/organization/OrgSwitcher.d.ts +7 -0
  186. package/dist/components/organization/OrgSwitcher.d.ts.map +1 -0
  187. package/dist/components/organization/PermissionMatrixEditor.d.ts +22 -0
  188. package/dist/components/organization/PermissionMatrixEditor.d.ts.map +1 -0
  189. package/dist/components/organization/PermissionProfilesTab.d.ts +3 -0
  190. package/dist/components/organization/PermissionProfilesTab.d.ts.map +1 -0
  191. package/dist/components/organization/TeamTab.d.ts +3 -0
  192. package/dist/components/organization/TeamTab.d.ts.map +1 -0
  193. package/dist/components/organization/TenantOnboarding.d.ts +9 -0
  194. package/dist/components/organization/TenantOnboarding.d.ts.map +1 -0
  195. package/dist/components/organization/index.d.ts +7 -0
  196. package/dist/components/organization/index.d.ts.map +1 -0
  197. package/dist/components/plugins/ConnectorsHub.d.ts +5 -0
  198. package/dist/components/plugins/ConnectorsHub.d.ts.map +1 -0
  199. package/dist/components/plugins/PluginSettingsPanel.d.ts +28 -0
  200. package/dist/components/plugins/PluginSettingsPanel.d.ts.map +1 -0
  201. package/dist/components/right-rail.d.ts +58 -0
  202. package/dist/components/right-rail.d.ts.map +1 -0
  203. package/dist/components/settings/BrandingSettings.d.ts +12 -0
  204. package/dist/components/settings/BrandingSettings.d.ts.map +1 -0
  205. package/dist/components/settings/CompanySettings.d.ts +13 -0
  206. package/dist/components/settings/CompanySettings.d.ts.map +1 -0
  207. package/dist/components/settings/ConnectedBrandingSettings.d.ts +2 -0
  208. package/dist/components/settings/ConnectedBrandingSettings.d.ts.map +1 -0
  209. package/dist/components/settings/ConnectedCompanySettings.d.ts +2 -0
  210. package/dist/components/settings/ConnectedCompanySettings.d.ts.map +1 -0
  211. package/dist/components/settings/ConnectedFieldRulesSettings.d.ts +2 -0
  212. package/dist/components/settings/ConnectedFieldRulesSettings.d.ts.map +1 -0
  213. package/dist/components/settings/ConnectedSecuritySettings.d.ts +2 -0
  214. package/dist/components/settings/ConnectedSecuritySettings.d.ts.map +1 -0
  215. package/dist/components/settings/ConnectedUserProfile.d.ts +3 -0
  216. package/dist/components/settings/ConnectedUserProfile.d.ts.map +1 -0
  217. package/dist/components/settings/FieldRulesSettings.d.ts +11 -0
  218. package/dist/components/settings/FieldRulesSettings.d.ts.map +1 -0
  219. package/dist/components/settings/HolidaysSettings.d.ts +21 -0
  220. package/dist/components/settings/HolidaysSettings.d.ts.map +1 -0
  221. package/dist/components/settings/LocationsCrudPage.d.ts +6 -0
  222. package/dist/components/settings/LocationsCrudPage.d.ts.map +1 -0
  223. package/dist/components/settings/LocationsOverview.d.ts +19 -0
  224. package/dist/components/settings/LocationsOverview.d.ts.map +1 -0
  225. package/dist/components/settings/SecuritySettings.d.ts +17 -0
  226. package/dist/components/settings/SecuritySettings.d.ts.map +1 -0
  227. package/dist/components/settings/SettingsPage.d.ts +46 -0
  228. package/dist/components/settings/SettingsPage.d.ts.map +1 -0
  229. package/dist/components/settings/UserProfile.d.ts +12 -0
  230. package/dist/components/settings/UserProfile.d.ts.map +1 -0
  231. package/dist/components/settings/index.d.ts +11 -0
  232. package/dist/components/settings/index.d.ts.map +1 -0
  233. package/dist/components/shared/ContactPicker.d.ts +92 -0
  234. package/dist/components/shared/ContactPicker.d.ts.map +1 -0
  235. package/dist/components/shared/PersonLink.d.ts +29 -0
  236. package/dist/components/shared/PersonLink.d.ts.map +1 -0
  237. package/dist/components/shared/create-person.d.ts +20 -0
  238. package/dist/components/shared/create-person.d.ts.map +1 -0
  239. package/dist/crud/CrudCardGrid.d.ts +13 -0
  240. package/dist/crud/CrudCardGrid.d.ts.map +1 -0
  241. package/dist/crud/CrudDetailPage.d.ts +23 -0
  242. package/dist/crud/CrudDetailPage.d.ts.map +1 -0
  243. package/dist/crud/CrudFormPage.d.ts +18 -0
  244. package/dist/crud/CrudFormPage.d.ts.map +1 -0
  245. package/dist/crud/CrudListView.d.ts +92 -0
  246. package/dist/crud/CrudListView.d.ts.map +1 -0
  247. package/dist/crud/CrudPage.d.ts +27 -0
  248. package/dist/crud/CrudPage.d.ts.map +1 -0
  249. package/dist/crud/CrudSkeletons.d.ts +21 -0
  250. package/dist/crud/CrudSkeletons.d.ts.map +1 -0
  251. package/dist/crud/DeleteConfirmDialog.d.ts +11 -0
  252. package/dist/crud/DeleteConfirmDialog.d.ts.map +1 -0
  253. package/dist/crud/EntityOverview.d.ts +14 -0
  254. package/dist/crud/EntityOverview.d.ts.map +1 -0
  255. package/dist/crud/ImportWizard.d.ts +18 -0
  256. package/dist/crud/ImportWizard.d.ts.map +1 -0
  257. package/dist/crud/archetype-lookup.d.ts +30 -0
  258. package/dist/crud/archetype-lookup.d.ts.map +1 -0
  259. package/dist/crud/archetypes/ActiveToggle.d.ts +8 -0
  260. package/dist/crud/archetypes/ActiveToggle.d.ts.map +1 -0
  261. package/dist/crud/archetypes/AddressesTab.d.ts +21 -0
  262. package/dist/crud/archetypes/AddressesTab.d.ts.map +1 -0
  263. package/dist/crud/archetypes/ArchetypeStatusBar.d.ts +11 -0
  264. package/dist/crud/archetypes/ArchetypeStatusBar.d.ts.map +1 -0
  265. package/dist/crud/archetypes/BlockSettingsPopover.d.ts +15 -0
  266. package/dist/crud/archetypes/BlockSettingsPopover.d.ts.map +1 -0
  267. package/dist/crud/archetypes/ClientOrdersTab.d.ts +18 -0
  268. package/dist/crud/archetypes/ClientOrdersTab.d.ts.map +1 -0
  269. package/dist/crud/archetypes/EntityLink.d.ts +32 -0
  270. package/dist/crud/archetypes/EntityLink.d.ts.map +1 -0
  271. package/dist/crud/archetypes/LocationDetailTabs.d.ts +11 -0
  272. package/dist/crud/archetypes/LocationDetailTabs.d.ts.map +1 -0
  273. package/dist/crud/archetypes/LocationFormLayout.d.ts +12 -0
  274. package/dist/crud/archetypes/LocationFormLayout.d.ts.map +1 -0
  275. package/dist/crud/archetypes/OrderDetailView.d.ts +115 -0
  276. package/dist/crud/archetypes/OrderDetailView.d.ts.map +1 -0
  277. package/dist/crud/archetypes/OrderFormView.d.ts +112 -0
  278. package/dist/crud/archetypes/OrderFormView.d.ts.map +1 -0
  279. package/dist/crud/archetypes/OrderListView.d.ts +36 -0
  280. package/dist/crud/archetypes/OrderListView.d.ts.map +1 -0
  281. package/dist/crud/archetypes/PersonDetailTabs.d.ts +35 -0
  282. package/dist/crud/archetypes/PersonDetailTabs.d.ts.map +1 -0
  283. package/dist/crud/archetypes/PersonFormLayout.d.ts +13 -0
  284. package/dist/crud/archetypes/PersonFormLayout.d.ts.map +1 -0
  285. package/dist/crud/archetypes/PersonPicker.d.ts +23 -0
  286. package/dist/crud/archetypes/PersonPicker.d.ts.map +1 -0
  287. package/dist/crud/archetypes/ProductDetailTabs.d.ts +11 -0
  288. package/dist/crud/archetypes/ProductDetailTabs.d.ts.map +1 -0
  289. package/dist/crud/archetypes/ProductFormLayout.d.ts +12 -0
  290. package/dist/crud/archetypes/ProductFormLayout.d.ts.map +1 -0
  291. package/dist/crud/archetypes/ScheduleEditor.d.ts +7 -0
  292. package/dist/crud/archetypes/ScheduleEditor.d.ts.map +1 -0
  293. package/dist/crud/archetypes/ServiceDetailTabs.d.ts +10 -0
  294. package/dist/crud/archetypes/ServiceDetailTabs.d.ts.map +1 -0
  295. package/dist/crud/archetypes/ServiceFormLayout.d.ts +12 -0
  296. package/dist/crud/archetypes/ServiceFormLayout.d.ts.map +1 -0
  297. package/dist/crud/archetypes/SubjectDetailTabs.d.ts +12 -0
  298. package/dist/crud/archetypes/SubjectDetailTabs.d.ts.map +1 -0
  299. package/dist/crud/archetypes/SubjectFormLayout.d.ts +14 -0
  300. package/dist/crud/archetypes/SubjectFormLayout.d.ts.map +1 -0
  301. package/dist/crud/createCrudPage.d.ts +34 -0
  302. package/dist/crud/createCrudPage.d.ts.map +1 -0
  303. package/dist/crud/csv-export.d.ts +3 -0
  304. package/dist/crud/csv-export.d.ts.map +1 -0
  305. package/dist/crud/fieldToColumn.d.ts +14 -0
  306. package/dist/crud/fieldToColumn.d.ts.map +1 -0
  307. package/dist/crud/index.d.ts +16 -0
  308. package/dist/crud/index.d.ts.map +1 -0
  309. package/dist/crud/placeholder.d.ts +7 -0
  310. package/dist/crud/placeholder.d.ts.map +1 -0
  311. package/dist/crud/relation-field.d.ts +28 -0
  312. package/dist/crud/relation-field.d.ts.map +1 -0
  313. package/dist/data/client.d.ts +14 -0
  314. package/dist/data/client.d.ts.map +1 -0
  315. package/dist/db.cjs +14 -0
  316. package/dist/db.cjs.map +1 -0
  317. package/dist/db.d.ts +2 -0
  318. package/dist/db.d.ts.map +1 -0
  319. package/dist/db.js +3 -0
  320. package/dist/db.js.map +1 -0
  321. package/dist/hooks/index.d.ts +20 -0
  322. package/dist/hooks/index.d.ts.map +1 -0
  323. package/dist/hooks/useAITools.d.ts +23 -0
  324. package/dist/hooks/useAITools.d.ts.map +1 -0
  325. package/dist/hooks/useAgentSurface.d.ts +15 -0
  326. package/dist/hooks/useAgentSurface.d.ts.map +1 -0
  327. package/dist/hooks/useAuth.d.ts +16 -0
  328. package/dist/hooks/useAuth.d.ts.map +1 -0
  329. package/dist/hooks/useChat.d.ts +38 -0
  330. package/dist/hooks/useChat.d.ts.map +1 -0
  331. package/dist/hooks/useDictation.d.ts +31 -0
  332. package/dist/hooks/useDictation.d.ts.map +1 -0
  333. package/dist/hooks/useFieldRules.d.ts +6 -0
  334. package/dist/hooks/useFieldRules.d.ts.map +1 -0
  335. package/dist/hooks/useFormatters.d.ts +7 -0
  336. package/dist/hooks/useFormatters.d.ts.map +1 -0
  337. package/dist/hooks/useGlobalSearch.d.ts +10 -0
  338. package/dist/hooks/useGlobalSearch.d.ts.map +1 -0
  339. package/dist/hooks/useLayout.d.ts +16 -0
  340. package/dist/hooks/useLayout.d.ts.map +1 -0
  341. package/dist/hooks/useMicLevels.d.ts +10 -0
  342. package/dist/hooks/useMicLevels.d.ts.map +1 -0
  343. package/dist/hooks/useModuleNavigation.d.ts +27 -0
  344. package/dist/hooks/useModuleNavigation.d.ts.map +1 -0
  345. package/dist/hooks/useNotifications.d.ts +11 -0
  346. package/dist/hooks/useNotifications.d.ts.map +1 -0
  347. package/dist/hooks/usePluginPrefs.d.ts +23 -0
  348. package/dist/hooks/usePluginPrefs.d.ts.map +1 -0
  349. package/dist/hooks/usePlugins.d.ts +5 -0
  350. package/dist/hooks/usePlugins.d.ts.map +1 -0
  351. package/dist/hooks/useSystemPermission.d.ts +3 -0
  352. package/dist/hooks/useSystemPermission.d.ts.map +1 -0
  353. package/dist/hooks/useTenant.d.ts +23 -0
  354. package/dist/hooks/useTenant.d.ts.map +1 -0
  355. package/dist/hooks/useTenantPluginSettings.d.ts +12 -0
  356. package/dist/hooks/useTenantPluginSettings.d.ts.map +1 -0
  357. package/dist/hooks/useTenantPlugins.d.ts +10 -0
  358. package/dist/hooks/useTenantPlugins.d.ts.map +1 -0
  359. package/dist/hooks/useTranslation.d.ts +5 -0
  360. package/dist/hooks/useTranslation.d.ts.map +1 -0
  361. package/dist/index.d.ts +93 -0
  362. package/dist/index.d.ts.map +1 -0
  363. package/dist/index.js +17207 -0
  364. package/dist/index.js.map +1 -0
  365. package/dist/lib/agent-approvals.d.ts +27 -0
  366. package/dist/lib/agent-approvals.d.ts.map +1 -0
  367. package/dist/lib/agent-surface.d.ts +78 -0
  368. package/dist/lib/agent-surface.d.ts.map +1 -0
  369. package/dist/lib/ai-tool-handlers.d.ts +154 -0
  370. package/dist/lib/ai-tool-handlers.d.ts.map +1 -0
  371. package/dist/lib/apply-field-rules.d.ts +4 -0
  372. package/dist/lib/apply-field-rules.d.ts.map +1 -0
  373. package/dist/lib/assistant-delegation.d.ts +5 -0
  374. package/dist/lib/assistant-delegation.d.ts.map +1 -0
  375. package/dist/lib/assistant-feature.d.ts +8 -0
  376. package/dist/lib/assistant-feature.d.ts.map +1 -0
  377. package/dist/lib/attachments.d.ts +95 -0
  378. package/dist/lib/attachments.d.ts.map +1 -0
  379. package/dist/lib/auth-context.d.ts +5 -0
  380. package/dist/lib/auth-context.d.ts.map +1 -0
  381. package/dist/lib/cache.d.ts +18 -0
  382. package/dist/lib/cache.d.ts.map +1 -0
  383. package/dist/lib/cn.d.ts +2 -0
  384. package/dist/lib/cn.d.ts.map +1 -0
  385. package/dist/lib/core-ai-tools.d.ts +49 -0
  386. package/dist/lib/core-ai-tools.d.ts.map +1 -0
  387. package/dist/lib/create-client-orders-provider.d.ts +3 -0
  388. package/dist/lib/create-client-orders-provider.d.ts.map +1 -0
  389. package/dist/lib/csv.d.ts +14 -0
  390. package/dist/lib/csv.d.ts.map +1 -0
  391. package/dist/lib/currency.d.ts +7 -0
  392. package/dist/lib/currency.d.ts.map +1 -0
  393. package/dist/lib/dedup.d.ts +2 -0
  394. package/dist/lib/dedup.d.ts.map +1 -0
  395. package/dist/lib/entity-registry.d.ts +19 -0
  396. package/dist/lib/entity-registry.d.ts.map +1 -0
  397. package/dist/lib/entity-routes.d.ts +48 -0
  398. package/dist/lib/entity-routes.d.ts.map +1 -0
  399. package/dist/lib/fayz-agent.d.ts +23 -0
  400. package/dist/lib/fayz-agent.d.ts.map +1 -0
  401. package/dist/lib/format.d.ts +7 -0
  402. package/dist/lib/format.d.ts.map +1 -0
  403. package/dist/lib/locale-config.d.ts +8 -0
  404. package/dist/lib/locale-config.d.ts.map +1 -0
  405. package/dist/lib/notes-tasks-bridge.d.ts +28 -0
  406. package/dist/lib/notes-tasks-bridge.d.ts.map +1 -0
  407. package/dist/lib/org-context.d.ts +5 -0
  408. package/dist/lib/org-context.d.ts.map +1 -0
  409. package/dist/lib/plugins.d.ts +2 -0
  410. package/dist/lib/plugins.d.ts.map +1 -0
  411. package/dist/lib/record-refs.d.ts +31 -0
  412. package/dist/lib/record-refs.d.ts.map +1 -0
  413. package/dist/lib/router.d.ts +15 -0
  414. package/dist/lib/router.d.ts.map +1 -0
  415. package/dist/lib/schedule-config.d.ts +32 -0
  416. package/dist/lib/schedule-config.d.ts.map +1 -0
  417. package/dist/lib/schedule-service.d.ts +76 -0
  418. package/dist/lib/schedule-service.d.ts.map +1 -0
  419. package/dist/lib/search-targets.d.ts +12 -0
  420. package/dist/lib/search-targets.d.ts.map +1 -0
  421. package/dist/lib/speech.d.ts +36 -0
  422. package/dist/lib/speech.d.ts.map +1 -0
  423. package/dist/lib/supabase.d.ts +10 -0
  424. package/dist/lib/supabase.d.ts.map +1 -0
  425. package/dist/org/adapters/mock.d.ts +4 -0
  426. package/dist/org/adapters/mock.d.ts.map +1 -0
  427. package/dist/org/adapters/supabase.d.ts +33 -0
  428. package/dist/org/adapters/supabase.d.ts.map +1 -0
  429. package/dist/org/cache.d.ts +29 -0
  430. package/dist/org/cache.d.ts.map +1 -0
  431. package/dist/org/context.d.ts +36 -0
  432. package/dist/org/context.d.ts.map +1 -0
  433. package/dist/org/index.d.ts +10 -0
  434. package/dist/org/index.d.ts.map +1 -0
  435. package/dist/org/index.js +5 -0
  436. package/dist/org/index.js.map +1 -0
  437. package/dist/org/store.d.ts +20 -0
  438. package/dist/org/store.d.ts.map +1 -0
  439. package/dist/org/team-rows.d.ts +45 -0
  440. package/dist/org/team-rows.d.ts.map +1 -0
  441. package/dist/permissions/PermissionGate.d.ts +12 -0
  442. package/dist/permissions/PermissionGate.d.ts.map +1 -0
  443. package/dist/permissions/context.d.ts +39 -0
  444. package/dist/permissions/context.d.ts.map +1 -0
  445. package/dist/permissions/index.d.ts +5 -0
  446. package/dist/permissions/index.d.ts.map +1 -0
  447. package/dist/permissions/index.js +3 -0
  448. package/dist/permissions/index.js.map +1 -0
  449. package/dist/permissions/roles.d.ts +7 -0
  450. package/dist/permissions/roles.d.ts.map +1 -0
  451. package/dist/permissions/store.d.ts +21 -0
  452. package/dist/permissions/store.d.ts.map +1 -0
  453. package/dist/plugins/ModuleActionBar.d.ts +27 -0
  454. package/dist/plugins/ModuleActionBar.d.ts.map +1 -0
  455. package/dist/plugins/PluginRegistryManager.d.ts +13 -0
  456. package/dist/plugins/PluginRegistryManager.d.ts.map +1 -0
  457. package/dist/plugins/QuickActionsButton.d.ts +12 -0
  458. package/dist/plugins/QuickActionsButton.d.ts.map +1 -0
  459. package/dist/plugins/SettingsGroup.d.ts +25 -0
  460. package/dist/plugins/SettingsGroup.d.ts.map +1 -0
  461. package/dist/plugins/WidgetSlot.d.ts +8 -0
  462. package/dist/plugins/WidgetSlot.d.ts.map +1 -0
  463. package/dist/plugins/createPluginContext.d.ts +28 -0
  464. package/dist/plugins/createPluginContext.d.ts.map +1 -0
  465. package/dist/plugins/createViewRouter.d.ts +38 -0
  466. package/dist/plugins/createViewRouter.d.ts.map +1 -0
  467. package/dist/projects/ProjectsSettings.d.ts +3 -0
  468. package/dist/projects/ProjectsSettings.d.ts.map +1 -0
  469. package/dist/projects/SeuSiteWidget.d.ts +7 -0
  470. package/dist/projects/SeuSiteWidget.d.ts.map +1 -0
  471. package/dist/projects/provider.d.ts +8 -0
  472. package/dist/projects/provider.d.ts.map +1 -0
  473. package/dist/projects/store.d.ts +16 -0
  474. package/dist/projects/store.d.ts.map +1 -0
  475. package/dist/projects/types.d.ts +46 -0
  476. package/dist/projects/types.d.ts.map +1 -0
  477. package/dist/stores/auth.store.d.ts +12 -0
  478. package/dist/stores/auth.store.d.ts.map +1 -0
  479. package/dist/stores/billing.store.d.ts +2 -0
  480. package/dist/stores/billing.store.d.ts.map +1 -0
  481. package/dist/stores/chat.store.d.ts +208 -0
  482. package/dist/stores/chat.store.d.ts.map +1 -0
  483. package/dist/stores/createCrudStore.d.ts +54 -0
  484. package/dist/stores/createCrudStore.d.ts.map +1 -0
  485. package/dist/stores/index.d.ts +13 -0
  486. package/dist/stores/index.d.ts.map +1 -0
  487. package/dist/stores/invite.store.d.ts +11 -0
  488. package/dist/stores/invite.store.d.ts.map +1 -0
  489. package/dist/stores/layout.store.d.ts +2 -0
  490. package/dist/stores/layout.store.d.ts.map +1 -0
  491. package/dist/stores/locale.store.d.ts +17 -0
  492. package/dist/stores/locale.store.d.ts.map +1 -0
  493. package/dist/stores/location.store.d.ts +20 -0
  494. package/dist/stores/location.store.d.ts.map +1 -0
  495. package/dist/stores/notifications.store.d.ts +12 -0
  496. package/dist/stores/notifications.store.d.ts.map +1 -0
  497. package/dist/stores/organization.store.d.ts +2 -0
  498. package/dist/stores/organization.store.d.ts.map +1 -0
  499. package/dist/stores/permissions.store.d.ts +2 -0
  500. package/dist/stores/permissions.store.d.ts.map +1 -0
  501. package/dist/stores/plugin.store.d.ts +24 -0
  502. package/dist/stores/plugin.store.d.ts.map +1 -0
  503. package/dist/stores/tenant.store.d.ts +11 -0
  504. package/dist/stores/tenant.store.d.ts.map +1 -0
  505. package/dist/stores/theme.store.d.ts +17 -0
  506. package/dist/stores/theme.store.d.ts.map +1 -0
  507. package/dist/theme/dark.d.ts +3 -0
  508. package/dist/theme/dark.d.ts.map +1 -0
  509. package/dist/theme/index.d.ts +8 -0
  510. package/dist/theme/index.d.ts.map +1 -0
  511. package/dist/theme/light.d.ts +3 -0
  512. package/dist/theme/light.d.ts.map +1 -0
  513. package/dist/theme/tailwind-preset.d.ts +4 -0
  514. package/dist/theme/tailwind-preset.d.ts.map +1 -0
  515. package/dist/theme/tokens.d.ts +119 -0
  516. package/dist/theme/tokens.d.ts.map +1 -0
  517. package/dist/theme/utils.d.ts +31 -0
  518. package/dist/theme/utils.d.ts.map +1 -0
  519. package/dist/types/auth-adapter.d.ts +14 -0
  520. package/dist/types/auth-adapter.d.ts.map +1 -0
  521. package/dist/types/auth.d.ts +34 -0
  522. package/dist/types/auth.d.ts.map +1 -0
  523. package/dist/types/billing.d.ts +81 -0
  524. package/dist/types/billing.d.ts.map +1 -0
  525. package/dist/types/client-orders.d.ts +47 -0
  526. package/dist/types/client-orders.d.ts.map +1 -0
  527. package/dist/types/crud.d.ts +137 -0
  528. package/dist/types/crud.d.ts.map +1 -0
  529. package/dist/types/entities.d.ts +150 -0
  530. package/dist/types/entities.d.ts.map +1 -0
  531. package/dist/types/entity-lookup.d.ts +18 -0
  532. package/dist/types/entity-lookup.d.ts.map +1 -0
  533. package/dist/types/index.d.ts +17 -0
  534. package/dist/types/index.d.ts.map +1 -0
  535. package/dist/types/integrations.d.ts +48 -0
  536. package/dist/types/integrations.d.ts.map +1 -0
  537. package/dist/types/invite.d.ts +23 -0
  538. package/dist/types/invite.d.ts.map +1 -0
  539. package/dist/types/layout.d.ts +26 -0
  540. package/dist/types/layout.d.ts.map +1 -0
  541. package/dist/types/notifications.d.ts +31 -0
  542. package/dist/types/notifications.d.ts.map +1 -0
  543. package/dist/types/org-adapter.d.ts +92 -0
  544. package/dist/types/org-adapter.d.ts.map +1 -0
  545. package/dist/types/permissions.d.ts +39 -0
  546. package/dist/types/permissions.d.ts.map +1 -0
  547. package/dist/types/platform.d.ts +25 -0
  548. package/dist/types/platform.d.ts.map +1 -0
  549. package/dist/types/plugins.d.ts +269 -0
  550. package/dist/types/plugins.d.ts.map +1 -0
  551. package/dist/types/tenant.d.ts +74 -0
  552. package/dist/types/tenant.d.ts.map +1 -0
  553. package/dist/ui.d.ts +2 -0
  554. package/dist/ui.d.ts.map +1 -0
  555. package/dist/ui.js +3 -0
  556. package/dist/ui.js.map +1 -0
  557. package/package.json +94 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Faya Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @fayz-ai/admin
2
+
3
+ > Turn plugins into a real multi-tenant SaaS with one `defineSaas` call.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@fayz-ai/admin.svg)](https://www.npmjs.com/package/@fayz-ai/admin)
6
+ [![license](https://img.shields.io/npm/l/@fayz-ai/admin.svg)](https://github.com/FayaLabs/fayz-sdk/blob/main/LICENSE)
7
+
8
+ **Status:** beta — published to npm and used across Fayz dogfood apps. Pre-1.0: minor APIs may change before 1.0.
9
+
10
+ This is where the Fayz pitch becomes a product. `@fayz-ai/admin` is the multi-tenant layer that wraps the headless core in everything a commercial app needs: organizations and tenancy, role-based permissions, billing, a native CRUD engine, and a full admin shell. You enable a set of plugins, call `defineSaas`, and get a running app with auth, org switching, permission gates, and a generated admin UI.
11
+
12
+ A salon and a clinic ship from the same engine — `@fayz-ai/admin` is the part that makes each one a real, isolated, billable tenant. Plugins snap in; this layer gives them an org to live in, a user to act as, and a shell to render through.
13
+
14
+ ## What's inside
15
+ - **App factory** — `defineSaas`, `AdminScaffold`, `AdminShell`, `LoginPage` (manifest-first admin entry)
16
+ - **CRUD engine** — `CrudPage`, `CrudListView`, `CrudFormPage`, `CrudDetailPage`, `CrudCardGrid`, `createCrudPage`, `ImportWizard`, `exportToCSV`
17
+ - **Org / multi-tenancy** — `createSupabaseOrgAdapter`, `createMockOrgAdapter`, `OrgProvider`, `useTenant`, `useOrganizationStore`
18
+ - **Permissions** — `PermissionsProvider`, `PermissionGate`, `usePermission`, `useHasPermission`, `usePermissions`
19
+ - **Billing** — `useBillingStore` with `Subscription` / `Invoice` types (Stripe-backed)
20
+ - **Plugin framework UI** — `WidgetSlot`, `SettingsGroup`, `QuickActionsButton`, `ModuleActionBar`, `createPluginContext`, `createViewRouter`, `PluginRegistryManager`
21
+ - **Supabase + theme** — `createFayzSupabaseClient`, `getCoreSchemaClient`, `createFayzTheme`, `fayzThemePresets`
22
+
23
+ ## Install
24
+ ```bash
25
+ npm install @fayz-ai/admin
26
+ ```
27
+ Peer dep: `react` (^18/^19). Pulls in `@fayz-ai/core`, `@fayz-ai/auth`, and `@fayz-ai/ui`.
28
+
29
+ ## Usage
30
+ ```tsx
31
+ import { defineSaas } from '@fayz-ai/admin'
32
+
33
+ export default defineSaas({
34
+ name: 'Glow Studio',
35
+ plugins: [crmPlugin, agendaPlugin, financialPlugin],
36
+ org: { adapter: orgAdapter },
37
+ })
38
+ ```
39
+
40
+ ## Part of the Fayz SDK
41
+ The top of the stack — the multi-tenant SaaS layer that composes `core`, `auth`, and `ui` into a shippable app.
42
+
43
+ ## Roadmap & contributing
44
+ Built and evolving in the open. See the [Fayz SDK roadmap](../../docs/platform/ROADMAP.md#saas) for current gaps, missing features, and good first issues.
@@ -0,0 +1,258 @@
1
+ import { useTranslation } from './chunk-YUHCC7JY.js';
2
+ import * as React from 'react';
3
+ import { useState, useEffect, useRef, useMemo } from 'react';
4
+ import { Command } from 'cmdk';
5
+ import * as Dialog from '@radix-ui/react-dialog';
6
+ import { Search, Loader2, Zap, UserX, UserPlus, UserCheck, TrendingUp, Star, Inbox, Clock3, Clock, Ban, Receipt, Landmark, Sparkles, Boxes, Box, User, FolderOpen, ListPlus, Shield, List, Plus, Filter, Building2, Contact, Handshake, Map, MapPin, UtensilsCrossed, Camera, Tags, Tag, Percent, Globe, MessageCircle, BookOpenCheck, BookOpen, UserCog, Briefcase, ListChecks, ClipboardList, Wrench, Target, ShoppingBag, ShoppingCart, Megaphone, CircleDollarSign, BadgeDollarSign, DollarSign, Mail, FileCheck2, FileText, CalendarX, CalendarCheck2, BarChart3, Activity, Package, CalendarClock, Calendar, Bell, CreditCard, Settings, Users, Home } from 'lucide-react';
7
+ import { foldText, MIN_QUERY_LENGTH, normalizeQuery, scoreCandidate, highlightRanges } from '@fayz-ai/core';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+
10
+ var ICON_MAP = {
11
+ Home,
12
+ Users,
13
+ Settings,
14
+ CreditCard,
15
+ Bell,
16
+ Calendar,
17
+ CalendarClock,
18
+ Package,
19
+ Activity,
20
+ BarChart3,
21
+ CalendarCheck2,
22
+ CalendarX,
23
+ FileText,
24
+ FileCheck2,
25
+ Mail,
26
+ Search,
27
+ DollarSign,
28
+ BadgeDollarSign,
29
+ CircleDollarSign,
30
+ Megaphone,
31
+ ShoppingCart,
32
+ ShoppingBag,
33
+ Target,
34
+ Wrench,
35
+ ClipboardList,
36
+ ListChecks,
37
+ Briefcase,
38
+ UserCog,
39
+ BookOpen,
40
+ BookOpenCheck,
41
+ MessageCircle,
42
+ Globe,
43
+ Percent,
44
+ Tag,
45
+ Tags,
46
+ Camera,
47
+ UtensilsCrossed,
48
+ MapPin,
49
+ Map,
50
+ Handshake,
51
+ Contact,
52
+ Building2,
53
+ Filter,
54
+ Plus,
55
+ List,
56
+ Shield,
57
+ ListPlus,
58
+ FolderOpen,
59
+ User,
60
+ Box,
61
+ Boxes,
62
+ Sparkles,
63
+ Landmark,
64
+ Receipt,
65
+ Ban,
66
+ Clock,
67
+ Clock3,
68
+ Inbox,
69
+ Star,
70
+ TrendingUp,
71
+ UserCheck,
72
+ UserPlus,
73
+ UserX,
74
+ Zap
75
+ };
76
+ var DEBOUNCE_MS = 140;
77
+ function Highlight({ text, query }) {
78
+ const parts = useMemo(() => {
79
+ const normalized = normalizeQuery(query);
80
+ const ranges = highlightRanges(text, normalized);
81
+ if (ranges.length === 0) return [{ text, hit: false }];
82
+ const out = [];
83
+ let cursor = 0;
84
+ for (const [from, to] of ranges) {
85
+ if (from > cursor) out.push({ text: text.slice(cursor, from), hit: false });
86
+ out.push({ text: text.slice(from, to), hit: true });
87
+ cursor = to;
88
+ }
89
+ if (cursor < text.length) out.push({ text: text.slice(cursor), hit: false });
90
+ return out;
91
+ }, [text, query]);
92
+ return /* @__PURE__ */ jsx(Fragment, { children: parts.map(
93
+ (part, i) => part.hit ? /* @__PURE__ */ jsx("mark", { className: "bg-transparent font-semibold text-foreground", children: part.text }, i) : /* @__PURE__ */ jsx(React.Fragment, { children: part.text }, i)
94
+ ) });
95
+ }
96
+ function useEntitySearch(searchFn, query, open) {
97
+ const [result, setResult] = useState(null);
98
+ const [loading, setLoading] = useState(false);
99
+ const generation = useRef(0);
100
+ useEffect(() => {
101
+ const trimmed = query.trim();
102
+ if (!open || !searchFn || foldText(trimmed).length < MIN_QUERY_LENGTH) {
103
+ setResult(null);
104
+ setLoading(false);
105
+ return;
106
+ }
107
+ const token = ++generation.current;
108
+ setLoading(true);
109
+ const timer = setTimeout(() => {
110
+ searchFn(trimmed, (partial) => {
111
+ if (token === generation.current) setResult((prev) => prev?.partial === false && prev.query === trimmed ? prev : partial);
112
+ }).then((final) => {
113
+ if (token !== generation.current) return;
114
+ setResult(final);
115
+ setLoading(false);
116
+ }).catch(() => {
117
+ if (token !== generation.current) return;
118
+ setLoading(false);
119
+ });
120
+ }, DEBOUNCE_MS);
121
+ return () => clearTimeout(timer);
122
+ }, [query, searchFn, open]);
123
+ return { result, loading };
124
+ }
125
+ function useRankedCommands(commands, query) {
126
+ return useMemo(() => {
127
+ const trimmed = query.trim();
128
+ if (!trimmed) return commands;
129
+ const normalized = normalizeQuery(trimmed);
130
+ if (normalized.tokens.length === 0) return commands;
131
+ return commands.map((cmd) => ({
132
+ cmd,
133
+ score: scoreCandidate(normalized, {
134
+ title: foldText(cmd.label),
135
+ haystack: foldText(`${cmd.label} ${cmd.group ?? ""} ${cmd.keywords ?? ""} ${cmd.subtitle ?? ""}`)
136
+ })
137
+ })).filter((c) => c.score > 0).sort((a, b) => b.score - a.score).map((c) => c.cmd);
138
+ }, [commands, query]);
139
+ }
140
+ var GROUP_HEADING = "[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:text-muted-foreground";
141
+ var ITEM = "flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm outline-none transition-colors aria-selected:bg-muted";
142
+ function CommandPalette({ commands = [], open, onOpenChange, onEntitySearch, onEntitySelect }) {
143
+ const { t } = useTranslation();
144
+ const [search, setSearch] = useState("");
145
+ const { result, loading } = useEntitySearch(onEntitySearch, search, open);
146
+ const rankedCommands = useRankedCommands(commands, search);
147
+ useEffect(() => {
148
+ const handleKeyDown = (e) => {
149
+ if ((e.metaKey || e.ctrlKey) && e.key === "k") {
150
+ e.preventDefault();
151
+ onOpenChange(!open);
152
+ }
153
+ };
154
+ document.addEventListener("keydown", handleKeyDown);
155
+ return () => document.removeEventListener("keydown", handleKeyDown);
156
+ }, [open, onOpenChange]);
157
+ useEffect(() => {
158
+ if (!open) setSearch("");
159
+ }, [open]);
160
+ const grouped = rankedCommands.reduce((acc, cmd) => {
161
+ const group = cmd.group ?? "Actions";
162
+ if (!acc[group]) acc[group] = [];
163
+ acc[group].push(cmd);
164
+ return acc;
165
+ }, {});
166
+ const hasQuery = foldText(search).length >= MIN_QUERY_LENGTH;
167
+ const recordGroups = hasQuery ? result?.groups ?? [] : [];
168
+ const recordCount = recordGroups.reduce((n, g) => n + g.hits.length, 0);
169
+ const totalResults = rankedCommands.length + recordCount;
170
+ const nothingYet = totalResults === 0;
171
+ return /* @__PURE__ */ jsx(Dialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(Dialog.Portal, { children: [
172
+ /* @__PURE__ */ jsx(Dialog.Overlay, { className: "saas-overlay fixed inset-0 z-50 bg-black/40 backdrop-blur-sm" }),
173
+ /* @__PURE__ */ jsxs(Dialog.Content, { className: "fayz-glass-surface saas-cmd-palette fixed left-1/2 top-[15%] z-50 w-full max-w-xl -translate-x-1/2 overflow-hidden rounded-2xl border border-border/50 bg-popover shadow-2xl", children: [
174
+ /* @__PURE__ */ jsx(Dialog.Title, { className: "sr-only", children: t("layout.commandPalette.title") }),
175
+ /* @__PURE__ */ jsx(Dialog.Description, { className: "sr-only", children: t("layout.commandPalette.description") }),
176
+ /* @__PURE__ */ jsxs(Command, { className: "flex flex-col", label: "Command palette", shouldFilter: false, children: [
177
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b border-border/50 px-4", children: [
178
+ /* @__PURE__ */ jsx(Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
179
+ /* @__PURE__ */ jsx(
180
+ Command.Input,
181
+ {
182
+ placeholder: t("layout.commandPalette.placeholder"),
183
+ className: "flex h-12 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground",
184
+ autoFocus: true,
185
+ value: search,
186
+ onValueChange: setSearch
187
+ }
188
+ ),
189
+ loading && /* @__PURE__ */ jsx(Loader2, { className: "h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground" }),
190
+ /* @__PURE__ */ jsx("kbd", { className: "hidden shrink-0 rounded-md border border-border bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground sm:inline-block", children: "ESC" })
191
+ ] }),
192
+ /* @__PURE__ */ jsxs(Command.List, { className: "max-h-[360px] overflow-y-auto p-1.5", children: [
193
+ nothingYet && /* @__PURE__ */ jsx(Command.Empty, { className: "py-8 text-center text-sm text-muted-foreground", children: loading ? t("layout.commandPalette.searching") : t("layout.commandPalette.noResults") }),
194
+ recordGroups.map((group) => {
195
+ const GroupIcon = group.icon ? ICON_MAP[group.icon] ?? User : User;
196
+ return /* @__PURE__ */ jsx(Command.Group, { heading: group.label, className: GROUP_HEADING, children: group.hits.map((hit) => {
197
+ const Icon = hit.icon ? ICON_MAP[hit.icon] ?? GroupIcon : GroupIcon;
198
+ return /* @__PURE__ */ jsxs(
199
+ Command.Item,
200
+ {
201
+ value: hit.uid,
202
+ onSelect: () => {
203
+ onEntitySelect?.(hit);
204
+ onOpenChange(false);
205
+ },
206
+ className: ITEM,
207
+ children: [
208
+ /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
209
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
210
+ /* @__PURE__ */ jsx("span", { className: "block truncate", children: /* @__PURE__ */ jsx(Highlight, { text: hit.title, query: search }) }),
211
+ hit.subtitle && /* @__PURE__ */ jsx("span", { className: "block truncate text-[11px] text-muted-foreground", children: /* @__PURE__ */ jsx(Highlight, { text: hit.subtitle, query: search }) })
212
+ ] }),
213
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground/40", children: group.label })
214
+ ]
215
+ },
216
+ hit.uid
217
+ );
218
+ }) }, `entity:${group.key}`);
219
+ }),
220
+ Object.entries(grouped).map(([group, items]) => /* @__PURE__ */ jsx(Command.Group, { heading: group, className: GROUP_HEADING, children: items.map((cmd, i) => {
221
+ const Icon = cmd.icon ? ICON_MAP[cmd.icon] ?? null : null;
222
+ const uid = `${group}:${cmd.id}:${i}`;
223
+ return /* @__PURE__ */ jsxs(
224
+ Command.Item,
225
+ {
226
+ value: uid,
227
+ onSelect: () => {
228
+ cmd.action();
229
+ onOpenChange(false);
230
+ },
231
+ className: ITEM,
232
+ children: [
233
+ Icon && /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
234
+ /* @__PURE__ */ jsx("span", { className: "flex-1", children: /* @__PURE__ */ jsx(Highlight, { text: cmd.label, query: search }) }),
235
+ /* @__PURE__ */ jsx("span", { className: "text-[11px] text-muted-foreground/40", children: cmd.group })
236
+ ]
237
+ },
238
+ uid
239
+ );
240
+ }) }, group))
241
+ ] }),
242
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-t border-border/50 px-4 py-2", children: [
243
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: loading ? t("layout.commandPalette.searching") : hasQuery ? t("layout.commandPalette.resultCount", { count: String(totalResults), plural: totalResults !== 1 ? "s" : "" }) : t("layout.commandPalette.commandCount", { count: String(commands.length), plural: commands.length !== 1 ? "s" : "" }) }),
244
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-[10px] text-muted-foreground", children: [
245
+ /* @__PURE__ */ jsx("kbd", { className: "rounded border border-border bg-muted px-1 py-0.5 font-medium", children: "\u2191\u2193" }),
246
+ /* @__PURE__ */ jsx("span", { children: t("layout.commandPalette.navigate") }),
247
+ /* @__PURE__ */ jsx("kbd", { className: "rounded border border-border bg-muted px-1 py-0.5 font-medium", children: "\u21B5" }),
248
+ /* @__PURE__ */ jsx("span", { children: t("layout.commandPalette.open") })
249
+ ] })
250
+ ] })
251
+ ] })
252
+ ] })
253
+ ] }) });
254
+ }
255
+
256
+ export { CommandPalette };
257
+ //# sourceMappingURL=CommandPalette-2AL327XQ.js.map
258
+ //# sourceMappingURL=CommandPalette-2AL327XQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/CommandPalette.tsx"],"names":["Fragment"],"mappings":"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","file":"CommandPalette-2AL327XQ.js","sourcesContent":["import * as React from 'react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { Command } from 'cmdk'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport {\n Home, Users, Settings, CreditCard, Bell, Calendar, CalendarCheck2,\n CalendarClock, CalendarX, Package, Activity, BarChart3, FileText, FileCheck2, Mail, Search,\n DollarSign, BadgeDollarSign, CircleDollarSign, Megaphone, ShoppingCart, ShoppingBag, Target,\n Wrench, ClipboardList, ListChecks, Briefcase, UserCog, BookOpen, BookOpenCheck, MessageCircle,\n Globe, Percent, Tag, Tags, Camera, UtensilsCrossed, MapPin, Map, Handshake,\n Contact, Building2, Filter, Plus, List, Shield, User, Box, Sparkles, Loader2,\n ListPlus, FolderOpen, Boxes, Landmark, Receipt, Ban, Clock, Clock3, Inbox,\n Star, TrendingUp, UserCheck, UserPlus, UserX, Zap,\n type LucideIcon,\n} from 'lucide-react'\nimport {\n MIN_QUERY_LENGTH, highlightRanges, normalizeQuery, scoreCandidate, foldText,\n type GlobalSearchResult, type SearchHit,\n} from '@fayz-ai/core'\nimport { useTranslation } from '../../hooks/useTranslation'\n\nexport interface CommandItem {\n id: string\n label: string\n icon?: string\n action: () => void\n group?: string\n keywords?: string\n subtitle?: string\n}\n\n/** Runs one global search. `onPartial` paints a cheap early answer, if there is one. */\nexport type EntitySearchFn = (\n query: string,\n onPartial?: (result: GlobalSearchResult) => void,\n) => Promise<GlobalSearchResult>\n\ninterface CommandPaletteProps {\n commands?: CommandItem[]\n open: boolean\n onOpenChange: (open: boolean) => void\n onEntitySearch?: EntitySearchFn\n onEntitySelect?: (hit: SearchHit) => void\n}\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n Home, Users, Settings, CreditCard, Bell, Calendar, CalendarClock, Package, Activity, BarChart3,\n CalendarCheck2, CalendarX, FileText, FileCheck2, Mail, Search, DollarSign, BadgeDollarSign, CircleDollarSign, Megaphone, ShoppingCart, ShoppingBag, Target,\n Wrench, ClipboardList, ListChecks, Briefcase, UserCog, BookOpen, BookOpenCheck, MessageCircle,\n Globe, Percent, Tag, Tags, Camera, UtensilsCrossed, MapPin, Map, Handshake,\n Contact, Building2, Filter, Plus, List, Shield, ListPlus, FolderOpen, User, Box, Boxes, Sparkles, Landmark, Receipt, Ban, Clock, Clock3, Inbox,\n Star, TrendingUp, UserCheck, UserPlus, UserX, Zap,\n}\n\n/** Long enough that a fast typist issues one request per word, not per letter. */\nconst DEBOUNCE_MS = 140\n\n// Highlighting — the matched run, in the record's own spelling\n\nfunction Highlight({ text, query }: { text: string; query: string }) {\n const parts = useMemo(() => {\n const normalized = normalizeQuery(query)\n const ranges = highlightRanges(text, normalized)\n if (ranges.length === 0) return [{ text, hit: false }]\n const out: Array<{ text: string; hit: boolean }> = []\n let cursor = 0\n for (const [from, to] of ranges) {\n if (from > cursor) out.push({ text: text.slice(cursor, from), hit: false })\n out.push({ text: text.slice(from, to), hit: true })\n cursor = to\n }\n if (cursor < text.length) out.push({ text: text.slice(cursor), hit: false })\n return out\n }, [text, query])\n\n return (\n <>\n {parts.map((part, i) =>\n part.hit\n ? <mark key={i} className=\"bg-transparent font-semibold text-foreground\">{part.text}</mark>\n : <React.Fragment key={i}>{part.text}</React.Fragment>,\n )}\n </>\n )\n}\n\n// Records arrive from the server; commands are already in memory. Same scorer,\n// different clocks — commands re-rank per keystroke, records refine as they land.\n\nfunction useEntitySearch(searchFn: EntitySearchFn | undefined, query: string, open: boolean) {\n const [result, setResult] = useState<GlobalSearchResult | null>(null)\n const [loading, setLoading] = useState(false)\n const generation = useRef(0)\n\n useEffect(() => {\n const trimmed = query.trim()\n if (!open || !searchFn || foldText(trimmed).length < MIN_QUERY_LENGTH) {\n setResult(null)\n setLoading(false)\n return\n }\n\n const token = ++generation.current\n setLoading(true)\n\n const timer = setTimeout(() => {\n searchFn(trimmed, (partial) => {\n // A partial must never replace a final answer for this same query.\n if (token === generation.current) setResult((prev) => (prev?.partial === false && prev.query === trimmed ? prev : partial))\n })\n .then((final) => {\n if (token !== generation.current) return\n setResult(final)\n setLoading(false)\n })\n .catch(() => {\n // Keep what is on screen: a failed refresh is not an empty result.\n if (token !== generation.current) return\n setLoading(false)\n })\n }, DEBOUNCE_MS)\n\n return () => clearTimeout(timer)\n }, [query, searchFn, open])\n\n return { result, loading }\n}\n\n/**\n * Commands, ranked by the same ladder records use. cmdk's own filter is OFF:\n * it re-filtered the SERVER's results with its own substring rules, so a record\n * matched by phone, by a note or by an accent-folded name was fetched and then\n * dropped — the list said \"no results\" while the footer counted them.\n */\nfunction useRankedCommands(commands: CommandItem[], query: string): CommandItem[] {\n return useMemo(() => {\n const trimmed = query.trim()\n if (!trimmed) return commands\n const normalized = normalizeQuery(trimmed)\n if (normalized.tokens.length === 0) return commands\n return commands\n .map((cmd) => ({\n cmd,\n score: scoreCandidate(normalized, {\n title: foldText(cmd.label),\n haystack: foldText(`${cmd.label} ${cmd.group ?? ''} ${cmd.keywords ?? ''} ${cmd.subtitle ?? ''}`),\n }),\n }))\n .filter((c) => c.score > 0)\n .sort((a, b) => b.score - a.score)\n .map((c) => c.cmd)\n }, [commands, query])\n}\n\nconst GROUP_HEADING =\n '[&_[cmdk-group-heading]]:px-3 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:text-muted-foreground'\n\nconst ITEM =\n 'flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm outline-none transition-colors aria-selected:bg-muted'\n\nexport function CommandPalette({ commands = [], open, onOpenChange, onEntitySearch, onEntitySelect }: CommandPaletteProps) {\n const { t } = useTranslation()\n const [search, setSearch] = useState('')\n const { result, loading } = useEntitySearch(onEntitySearch, search, open)\n const rankedCommands = useRankedCommands(commands, search)\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n onOpenChange(!open)\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, onOpenChange])\n\n // Reset search when closed\n useEffect(() => {\n if (!open) setSearch('')\n }, [open])\n\n const grouped = rankedCommands.reduce<Record<string, CommandItem[]>>((acc, cmd) => {\n const group = cmd.group ?? 'Actions'\n if (!acc[group]) acc[group] = []\n acc[group].push(cmd)\n return acc\n }, {})\n\n const hasQuery = foldText(search).length >= MIN_QUERY_LENGTH\n // A lookup wants the client, not the page that lists clients.\n const recordGroups = hasQuery ? (result?.groups ?? []) : []\n const recordCount = recordGroups.reduce((n, g) => n + g.hits.length, 0)\n const totalResults = rankedCommands.length + recordCount\n const nothingYet = totalResults === 0\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"saas-overlay fixed inset-0 z-50 bg-black/40 backdrop-blur-sm\" />\n <Dialog.Content className=\"fayz-glass-surface saas-cmd-palette fixed left-1/2 top-[15%] z-50 w-full max-w-xl -translate-x-1/2 overflow-hidden rounded-2xl border border-border/50 bg-popover shadow-2xl\">\n <Dialog.Title className=\"sr-only\">{t('layout.commandPalette.title')}</Dialog.Title>\n <Dialog.Description className=\"sr-only\">{t('layout.commandPalette.description')}</Dialog.Description>\n\n <Command className=\"flex flex-col\" label=\"Command palette\" shouldFilter={false}>\n <div className=\"flex items-center gap-3 border-b border-border/50 px-4\">\n <Search className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <Command.Input\n placeholder={t('layout.commandPalette.placeholder')}\n className=\"flex h-12 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n autoFocus\n value={search}\n onValueChange={setSearch}\n />\n {loading && <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin text-muted-foreground\" />}\n <kbd className=\"hidden shrink-0 rounded-md border border-border bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground sm:inline-block\">ESC</kbd>\n </div>\n\n <Command.List className=\"max-h-[360px] overflow-y-auto p-1.5\">\n {nothingYet && (\n <Command.Empty className=\"py-8 text-center text-sm text-muted-foreground\">\n {loading ? t('layout.commandPalette.searching') : t('layout.commandPalette.noResults')}\n </Command.Empty>\n )}\n\n {/* Records first */}\n {recordGroups.map((group) => {\n const GroupIcon = group.icon ? (ICON_MAP[group.icon] ?? User) : User\n return (\n <Command.Group key={`entity:${group.key}`} heading={group.label} className={GROUP_HEADING}>\n {group.hits.map((hit) => {\n const Icon = hit.icon ? (ICON_MAP[hit.icon] ?? GroupIcon) : GroupIcon\n return (\n <Command.Item\n key={hit.uid}\n value={hit.uid}\n onSelect={() => { onEntitySelect?.(hit); onOpenChange(false) }}\n className={ITEM}\n >\n <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <span className=\"block truncate\"><Highlight text={hit.title} query={search} /></span>\n {hit.subtitle && (\n <span className=\"block truncate text-[11px] text-muted-foreground\">\n <Highlight text={hit.subtitle} query={search} />\n </span>\n )}\n </div>\n <span className=\"shrink-0 text-[11px] text-muted-foreground/40\">{group.label}</span>\n </Command.Item>\n )\n })}\n </Command.Group>\n )\n })}\n\n {/* Pages and actions */}\n {Object.entries(grouped).map(([group, items]) => (\n <Command.Group key={group} heading={group} className={GROUP_HEADING}>\n {items.map((cmd, i) => {\n const Icon = cmd.icon ? (ICON_MAP[cmd.icon] ?? null) : null\n // Command ids are not unique — \"Clientes\" and its \"Lista\"\n // child both mint `page:/clients`. Also the cmdk value.\n const uid = `${group}:${cmd.id}:${i}`\n return (\n <Command.Item\n key={uid}\n value={uid}\n onSelect={() => { cmd.action(); onOpenChange(false) }}\n className={ITEM}\n >\n {Icon && <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"flex-1\"><Highlight text={cmd.label} query={search} /></span>\n <span className=\"text-[11px] text-muted-foreground/40\">{cmd.group}</span>\n </Command.Item>\n )\n })}\n </Command.Group>\n ))}\n </Command.List>\n\n <div className=\"flex items-center justify-between border-t border-border/50 px-4 py-2\">\n <span className=\"text-xs text-muted-foreground\">\n {loading\n ? t('layout.commandPalette.searching')\n : hasQuery\n ? t('layout.commandPalette.resultCount', { count: String(totalResults), plural: totalResults !== 1 ? 's' : '' })\n : t('layout.commandPalette.commandCount', { count: String(commands.length), plural: commands.length !== 1 ? 's' : '' })}\n </span>\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground\">\n <kbd className=\"rounded border border-border bg-muted px-1 py-0.5 font-medium\">&uarr;&darr;</kbd>\n <span>{t('layout.commandPalette.navigate')}</span>\n <kbd className=\"rounded border border-border bg-muted px-1 py-0.5 font-medium\">&crarr;</kbd>\n <span>{t('layout.commandPalette.open')}</span>\n </div>\n </div>\n </Command>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { ImportWizard } from './chunk-UMRN6427.js';
2
+ //# sourceMappingURL=ImportWizard-CISHGNQC.js.map
3
+ //# sourceMappingURL=ImportWizard-CISHGNQC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ImportWizard-CISHGNQC.js"}