@datatechsolutions/ui 3.3.0 → 3.5.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 (212) hide show
  1. package/dist/astrlabe/index.js +113 -113
  2. package/dist/astrlabe/index.mjs +6 -6
  3. package/dist/astrlabe/workflow-canvas.js +6 -6
  4. package/dist/astrlabe/workflow-canvas.mjs +5 -5
  5. package/dist/brand/index.js +0 -14
  6. package/dist/brand/index.js.map +1 -1
  7. package/dist/brand/index.mjs +0 -14
  8. package/dist/brand/index.mjs.map +1 -1
  9. package/dist/{chunk-2WXRRQM3.mjs → chunk-2MJAHST4.mjs} +554 -516
  10. package/dist/chunk-2MJAHST4.mjs.map +1 -0
  11. package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
  12. package/dist/chunk-2OZZH2IO.js.map +1 -0
  13. package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
  14. package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
  15. package/dist/{chunk-O6M3KDGT.mjs → chunk-3OLYSMI5.mjs} +41 -7
  16. package/dist/chunk-3OLYSMI5.mjs.map +1 -0
  17. package/dist/{chunk-GIQXB3BG.mjs → chunk-4PFU6A2B.mjs} +3 -3
  18. package/dist/{chunk-GIQXB3BG.mjs.map → chunk-4PFU6A2B.mjs.map} +1 -1
  19. package/dist/{chunk-3ZUMJTDT.mjs → chunk-5BEVTOZV.mjs} +4 -5
  20. package/dist/{chunk-3JJWPOK6.js.map → chunk-5BEVTOZV.mjs.map} +1 -1
  21. package/dist/{chunk-3JJWPOK6.js → chunk-5I7F7KZ6.js} +10 -11
  22. package/dist/chunk-5I7F7KZ6.js.map +1 -0
  23. package/dist/{chunk-BR2GAZKG.mjs → chunk-6V3DUBOZ.mjs} +7 -7
  24. package/dist/{chunk-BR2GAZKG.mjs.map → chunk-6V3DUBOZ.mjs.map} +1 -1
  25. package/dist/{chunk-5GDKCFM5.mjs → chunk-6W7VTZG6.mjs} +3 -3
  26. package/dist/{chunk-5GDKCFM5.mjs.map → chunk-6W7VTZG6.mjs.map} +1 -1
  27. package/dist/{chunk-IJAKZHXX.js → chunk-74MHWEDC.js} +684 -645
  28. package/dist/chunk-74MHWEDC.js.map +1 -0
  29. package/dist/{chunk-IRPS5UCS.mjs → chunk-7CEZB3ZD.mjs} +3 -3
  30. package/dist/{chunk-IRPS5UCS.mjs.map → chunk-7CEZB3ZD.mjs.map} +1 -1
  31. package/dist/{chunk-UDDZTTLO.mjs → chunk-7UHV6A4C.mjs} +6 -7
  32. package/dist/chunk-7UHV6A4C.mjs.map +1 -0
  33. package/dist/{chunk-ZM5MVWIT.js → chunk-A7FI4K7Z.js} +5 -6
  34. package/dist/chunk-A7FI4K7Z.js.map +1 -0
  35. package/dist/{chunk-MWPTSBAI.js → chunk-AVM53A3Y.js} +63 -29
  36. package/dist/chunk-AVM53A3Y.js.map +1 -0
  37. package/dist/{chunk-I2NZGVBG.js → chunk-AWDH6WNA.js} +1214 -5396
  38. package/dist/chunk-AWDH6WNA.js.map +1 -0
  39. package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
  40. package/dist/chunk-BUDZNAKL.mjs.map +1 -0
  41. package/dist/{chunk-OCELRSLO.js → chunk-BVXATTTA.js} +4 -4
  42. package/dist/{chunk-OCELRSLO.js.map → chunk-BVXATTTA.js.map} +1 -1
  43. package/dist/{chunk-W5OEBO6E.js → chunk-C4NRF2G2.js} +13 -14
  44. package/dist/chunk-C4NRF2G2.js.map +1 -0
  45. package/dist/{chunk-JSNRCYSO.js → chunk-CY2MBKVG.js} +4 -4
  46. package/dist/{chunk-JSNRCYSO.js.map → chunk-CY2MBKVG.js.map} +1 -1
  47. package/dist/{chunk-ZL6C2ZAF.js → chunk-FK3WDELF.js} +67 -67
  48. package/dist/{chunk-ZL6C2ZAF.js.map → chunk-FK3WDELF.js.map} +1 -1
  49. package/dist/{chunk-MVBIAXVN.mjs → chunk-IOEQ2GET.mjs} +14 -11
  50. package/dist/chunk-IOEQ2GET.mjs.map +1 -0
  51. package/dist/{chunk-AOUUZ52N.js → chunk-NCDBNGIB.js} +85 -86
  52. package/dist/chunk-NCDBNGIB.js.map +1 -0
  53. package/dist/{chunk-B67DP7MI.mjs → chunk-NJ5RVWLA.mjs} +4 -4
  54. package/dist/{chunk-B67DP7MI.mjs.map → chunk-NJ5RVWLA.mjs.map} +1 -1
  55. package/dist/{chunk-HDCUWUNH.js → chunk-NKXQYFS7.js} +28 -27
  56. package/dist/chunk-NKXQYFS7.js.map +1 -0
  57. package/dist/{chunk-JN6IL6OH.mjs → chunk-NOHHZ6FM.mjs} +1171 -5316
  58. package/dist/chunk-NOHHZ6FM.mjs.map +1 -0
  59. package/dist/{chunk-PCYL4MII.mjs → chunk-OASC7NYV.mjs} +156 -314
  60. package/dist/chunk-OASC7NYV.mjs.map +1 -0
  61. package/dist/{chunk-RXZNACMI.js → chunk-P43PX75J.js} +33 -33
  62. package/dist/{chunk-RXZNACMI.js.map → chunk-P43PX75J.js.map} +1 -1
  63. package/dist/{chunk-OL73LBX5.mjs → chunk-QLFSJ6HK.mjs} +3 -4
  64. package/dist/chunk-QLFSJ6HK.mjs.map +1 -0
  65. package/dist/{chunk-LEKZUS6N.mjs → chunk-QPSHM2JQ.mjs} +4 -5
  66. package/dist/chunk-QPSHM2JQ.mjs.map +1 -0
  67. package/dist/{chunk-NJFRJ6YD.js → chunk-QSMPKL27.js} +225 -384
  68. package/dist/chunk-QSMPKL27.js.map +1 -0
  69. package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
  70. package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
  71. package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
  72. package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
  73. package/dist/{chunk-5RM6NGZ6.mjs → chunk-UHMAKUON.mjs} +3 -3
  74. package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-UHMAKUON.mjs.map} +1 -1
  75. package/dist/{chunk-TIJJHW2Z.js → chunk-V5VBYOF5.js} +36 -36
  76. package/dist/{chunk-TIJJHW2Z.js.map → chunk-V5VBYOF5.js.map} +1 -1
  77. package/dist/{chunk-KR2X2WHJ.js → chunk-VMGNQFRO.js} +53 -53
  78. package/dist/{chunk-KR2X2WHJ.js.map → chunk-VMGNQFRO.js.map} +1 -1
  79. package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
  80. package/dist/chunk-VY52Y5GC.js.map +1 -0
  81. package/dist/{chunk-TVMLV675.js → chunk-Z7VY5M4T.js} +98 -95
  82. package/dist/chunk-Z7VY5M4T.js.map +1 -0
  83. package/dist/{chunk-R4TQWXNG.mjs → chunk-ZM2Q2SMC.mjs} +6 -5
  84. package/dist/chunk-ZM2Q2SMC.mjs.map +1 -0
  85. package/dist/index.js +744 -904
  86. package/dist/index.mjs +4 -4
  87. package/dist/platform/admin/index.js +13 -13
  88. package/dist/platform/admin/index.mjs +7 -7
  89. package/dist/platform/agents-workspace.js +9 -9
  90. package/dist/platform/agents-workspace.mjs +8 -8
  91. package/dist/platform/app-shell.js +6 -6
  92. package/dist/platform/app-shell.mjs +5 -5
  93. package/dist/platform/auth/index.js +30 -30
  94. package/dist/platform/auth/index.mjs +7 -7
  95. package/dist/platform/billing/index.js +6 -6
  96. package/dist/platform/billing/index.mjs +5 -5
  97. package/dist/platform/impersonation/index.js +6 -6
  98. package/dist/platform/impersonation/index.mjs +5 -5
  99. package/dist/platform/index.js +102 -4812
  100. package/dist/platform/index.js.map +1 -1
  101. package/dist/platform/index.mjs +24 -4729
  102. package/dist/platform/index.mjs.map +1 -1
  103. package/dist/platform/pages/index.js +320 -204
  104. package/dist/platform/pages/index.js.map +1 -1
  105. package/dist/platform/pages/index.mjs +146 -30
  106. package/dist/platform/pages/index.mjs.map +1 -1
  107. package/dist/platform/rbac.js +2 -2
  108. package/dist/platform/rbac.mjs +1 -1
  109. package/dist/platform/settings/index.js +10 -10
  110. package/dist/platform/settings/index.mjs +9 -9
  111. package/dist/platform/utils/index.js +3 -3
  112. package/dist/platform/utils/index.js.map +1 -1
  113. package/dist/platform/utils/index.mjs +1 -1
  114. package/dist/platform/utils/index.mjs.map +1 -1
  115. package/dist/platform/workflow-api-client.js +62 -62
  116. package/dist/platform/workflow-api-client.mjs +2 -2
  117. package/dist/platform/workflow-canvas-shell.js +7 -7
  118. package/dist/platform/workflow-canvas-shell.mjs +6 -6
  119. package/package.json +15 -5
  120. package/src/styles/liquid-glass.css +283 -2
  121. package/dist/astrlabe/contracts.d.mts +0 -517
  122. package/dist/astrlabe/contracts.d.ts +0 -517
  123. package/dist/astrlabe/graph-node.d.mts +0 -28
  124. package/dist/astrlabe/graph-node.d.ts +0 -28
  125. package/dist/astrlabe/index.d.mts +0 -751
  126. package/dist/astrlabe/index.d.ts +0 -751
  127. package/dist/astrlabe/utils.d.mts +0 -60
  128. package/dist/astrlabe/utils.d.ts +0 -60
  129. package/dist/astrlabe/workflow-canvas.d.mts +0 -69
  130. package/dist/astrlabe/workflow-canvas.d.ts +0 -69
  131. package/dist/astrlabe/workflow-preview-canvas.d.mts +0 -10
  132. package/dist/astrlabe/workflow-preview-canvas.d.ts +0 -10
  133. package/dist/billing-panel-DsHhhJqG.d.mts +0 -18
  134. package/dist/billing-panel-DsHhhJqG.d.ts +0 -18
  135. package/dist/brand/index.d.mts +0 -85
  136. package/dist/brand/index.d.ts +0 -85
  137. package/dist/chunk-2WXRRQM3.mjs.map +0 -1
  138. package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
  139. package/dist/chunk-AOUUZ52N.js.map +0 -1
  140. package/dist/chunk-FAGDZEKM.js.map +0 -1
  141. package/dist/chunk-HDCUWUNH.js.map +0 -1
  142. package/dist/chunk-HZ4LOVHM.js.map +0 -1
  143. package/dist/chunk-I2NZGVBG.js.map +0 -1
  144. package/dist/chunk-IJAKZHXX.js.map +0 -1
  145. package/dist/chunk-JN6IL6OH.mjs.map +0 -1
  146. package/dist/chunk-LEKZUS6N.mjs.map +0 -1
  147. package/dist/chunk-MVBIAXVN.mjs.map +0 -1
  148. package/dist/chunk-MWPTSBAI.js.map +0 -1
  149. package/dist/chunk-NJFRJ6YD.js.map +0 -1
  150. package/dist/chunk-O6M3KDGT.mjs.map +0 -1
  151. package/dist/chunk-OL73LBX5.mjs.map +0 -1
  152. package/dist/chunk-PCYL4MII.mjs.map +0 -1
  153. package/dist/chunk-R4TQWXNG.mjs.map +0 -1
  154. package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
  155. package/dist/chunk-TVMLV675.js.map +0 -1
  156. package/dist/chunk-UDDZTTLO.mjs.map +0 -1
  157. package/dist/chunk-W5OEBO6E.js.map +0 -1
  158. package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
  159. package/dist/chunk-ZM5MVWIT.js.map +0 -1
  160. package/dist/dynamic-island-confirm-BKsZkAEP.d.mts +0 -17
  161. package/dist/dynamic-island-confirm-BKsZkAEP.d.ts +0 -17
  162. package/dist/index-CoB18TbG.d.ts +0 -215
  163. package/dist/index-VI9gyJXl.d.mts +0 -215
  164. package/dist/index.d.mts +0 -5412
  165. package/dist/index.d.ts +0 -5412
  166. package/dist/layout-engine-YZcVr20M.d.mts +0 -19
  167. package/dist/layout-engine-YZcVr20M.d.ts +0 -19
  168. package/dist/lib/i18n-context.d.mts +0 -36
  169. package/dist/lib/i18n-context.d.ts +0 -36
  170. package/dist/lib/router-context.d.mts +0 -35
  171. package/dist/lib/router-context.d.ts +0 -35
  172. package/dist/navigation-BiWVffAN.d.mts +0 -49
  173. package/dist/navigation-BiWVffAN.d.ts +0 -49
  174. package/dist/platform/admin/index.d.mts +0 -17
  175. package/dist/platform/admin/index.d.ts +0 -17
  176. package/dist/platform/agents-workspace.d.mts +0 -19
  177. package/dist/platform/agents-workspace.d.ts +0 -19
  178. package/dist/platform/app-shell.d.mts +0 -58
  179. package/dist/platform/app-shell.d.ts +0 -58
  180. package/dist/platform/auth/index.d.mts +0 -73
  181. package/dist/platform/auth/index.d.ts +0 -73
  182. package/dist/platform/billing/index.d.mts +0 -29
  183. package/dist/platform/billing/index.d.ts +0 -29
  184. package/dist/platform/impersonation/index.d.mts +0 -19
  185. package/dist/platform/impersonation/index.d.ts +0 -19
  186. package/dist/platform/index.d.mts +0 -224
  187. package/dist/platform/index.d.ts +0 -224
  188. package/dist/platform/pages/index.d.mts +0 -432
  189. package/dist/platform/pages/index.d.ts +0 -432
  190. package/dist/platform/rbac.d.mts +0 -41
  191. package/dist/platform/rbac.d.ts +0 -41
  192. package/dist/platform/settings/index.d.mts +0 -31
  193. package/dist/platform/settings/index.d.ts +0 -31
  194. package/dist/platform/telemetry/index.d.mts +0 -51
  195. package/dist/platform/telemetry/index.d.ts +0 -51
  196. package/dist/platform/utils/index.d.mts +0 -32
  197. package/dist/platform/utils/index.d.ts +0 -32
  198. package/dist/platform/windsock-admin-client.d.mts +0 -57
  199. package/dist/platform/windsock-admin-client.d.ts +0 -57
  200. package/dist/platform/workflow-api-client.d.mts +0 -6
  201. package/dist/platform/workflow-api-client.d.ts +0 -6
  202. package/dist/platform/workflow-canvas-shell.d.mts +0 -18
  203. package/dist/platform/workflow-canvas-shell.d.ts +0 -18
  204. package/dist/rule-form-BYJzyork.d.mts +0 -128
  205. package/dist/rule-form-BYJzyork.d.ts +0 -128
  206. package/dist/workflow-api-client-BKD8OfP_.d.ts +0 -468
  207. package/dist/workflow-api-client-DoYj7nHz.d.mts +0 -468
  208. package/dist/workflow-store-o17I6L6A.d.ts +0 -79
  209. package/dist/workflow-store-ppVHdMZi.d.mts +0 -79
  210. package/src/brand/logos/kori-icon.svg +0 -45
  211. package/src/brand/logos/kori-logo-dark.svg +0 -40
  212. package/src/brand/logos/kori-logo.svg +0 -43
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/platform/admin/admin-user-list.tsx","../src/platform/admin/admin-user-form.tsx","../src/platform/admin/admin-organization-list.tsx","../src/platform/admin/admin-organization-form.tsx","../src/platform/admin/admin-permission-list.tsx"],"names":["useTranslations","useFormatter","useState","useCallback","useEffect","triggerHaptic","jsxs","Fragment","SectionCard","jsx","UsersIcon","SearchInput","InlineSpinner","EmptyState","Avatar","Badge","StatusBadge","ShieldCheckIcon","KeyIcon","Button","TrashIcon","DynamicIslandConfirm","GlassModal","UserPlusIcon","Input","PasswordInput","PasswordStrengthMeter","BuildingOffice2Icon","PlusIcon","PencilSquareIcon","Sheet"],"mappings":"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","file":"chunk-KR2X2WHJ.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n SearchInput,\n Badge,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n DynamicIslandConfirm,\n Avatar,\n triggerHaptic,\n} from '@ui/index'\nimport {\n UsersIcon,\n PlusIcon,\n TrashIcon,\n KeyIcon,\n ShieldCheckIcon,\n} from '@heroicons/react/24/outline'\n\nexport type { AdminUserListProps } from '@datatechsolutions/shared-domain'\nimport type { AdminUserListProps, AdminUserSummary } from '@datatechsolutions/shared-domain'\n\nconst PAGE_SIZE = 20\n\nexport function AdminUserList({ client, onUserSelect }: AdminUserListProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [users, setUsers] = useState<AdminUserSummary[]>([])\n const [total, setTotal] = useState(0)\n const [isLoading, setIsLoading] = useState(true)\n const [search, setSearch] = useState('')\n const [offset, setOffset] = useState(0)\n const [deleteTarget, setDeleteTarget] = useState<AdminUserSummary | null>(null)\n const [isDeletingUser, setIsDeletingUser] = useState(false)\n\n const fetchUsers = useCallback(async (searchQuery: string, pageOffset: number) => {\n setIsLoading(true)\n try {\n const result = await client.listUsers({\n search: searchQuery || undefined,\n limit: PAGE_SIZE,\n offset: pageOffset,\n })\n setUsers(result.items)\n setTotal(result.total)\n } catch {\n // Fail gracefully — show empty state\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n fetchUsers(search, offset)\n }, [fetchUsers, search, offset])\n\n const handleSearch = useCallback((value: string) => {\n setSearch(value)\n setOffset(0)\n }, [])\n\n const handleNextPage = useCallback(() => {\n triggerHaptic('light')\n setOffset((previous) => previous + PAGE_SIZE)\n }, [])\n\n const handlePreviousPage = useCallback(() => {\n triggerHaptic('light')\n setOffset((previous) => Math.max(0, previous - PAGE_SIZE))\n }, [])\n\n const handleDeleteRequest = useCallback((user: AdminUserSummary) => {\n triggerHaptic('warning')\n setDeleteTarget(user)\n }, [])\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!deleteTarget) return\n setIsDeletingUser(true)\n triggerHaptic('medium')\n try {\n await client.deleteUser(deleteTarget.id)\n setDeleteTarget(null)\n triggerHaptic('success')\n fetchUsers(search, offset)\n } catch {\n triggerHaptic('error')\n } finally {\n setIsDeletingUser(false)\n }\n }, [deleteTarget, client, fetchUsers, search, offset])\n\n const handleDeleteCancel = useCallback(() => {\n triggerHaptic('light')\n setDeleteTarget(null)\n }, [])\n\n const handleUserClick = useCallback((user: AdminUserSummary) => {\n triggerHaptic('light')\n onUserSelect?.(user)\n }, [onUserSelect])\n\n const totalPages = Math.ceil(total / PAGE_SIZE)\n const currentPage = Math.floor(offset / PAGE_SIZE) + 1\n\n const roleBadgeColor = (role: string) => {\n if (role === 'owner' || role === 'super_admin') return 'purple' as const\n if (role === 'admin') return 'blue' as const\n if (role === 'manager') return 'amber' as const\n return 'zinc' as const\n }\n\n return (\n <>\n <SectionCard\n header={{\n icon: <UsersIcon className=\"h-5 w-5 text-white\" />,\n title: t('admin.users.title'),\n subtitle: t('admin.users.subtitle'),\n gradient: 'from-blue-500 via-indigo-500 to-violet-500',\n }}\n padded={false}\n >\n {/* Search + filters */}\n <div className=\"border-b border-gray-200/60 p-4 dark:border-white/10\">\n <SearchInput\n value={search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => handleSearch(event.target.value)}\n placeholder={t('admin.users.searchPlaceholder')}\n />\n </div>\n\n {/* Content */}\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('admin.users.loading')}</span>\n </div>\n ) : users.length === 0 ? (\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('admin.users.emptyMessage')}\n description={t('admin.users.emptyDescription')}\n icon={UsersIcon}\n variant=\"card\"\n />\n </div>\n ) : (\n <>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-gray-200/60 dark:border-white/10\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnUser')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnRole')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnStatus')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.users.columnSecurity')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 md:table-cell\">\n {t('admin.users.columnLastLogin')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnActions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {users.map((user) => (\n <tr\n key={user.id}\n className=\"cursor-pointer transition-colors hover:bg-white/40 dark:hover:bg-white/5\"\n onClick={() => handleUserClick(user)}\n >\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <Avatar\n src={user.image ?? undefined}\n initials={(user.name ?? user.email).slice(0, 2).toUpperCase()}\n alt={user.name ?? user.email}\n />\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-gray-900 dark:text-white\">\n {user.name ?? user.email}\n </p>\n <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">\n {user.email}\n </p>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <Badge color={roleBadgeColor(user.role)}>{user.role}</Badge>\n </td>\n <td className=\"px-4 py-3\">\n <StatusBadge\n status={user.status === 'active' ? 'active' : 'inactive'}\n label={user.status}\n size=\"sm\"\n />\n </td>\n <td className=\"hidden px-4 py-3 sm:table-cell\">\n <div className=\"flex items-center gap-2\">\n {user.mfaEnabled && (\n <span title={t('admin.users.mfaEnabled')}>\n <ShieldCheckIcon className=\"h-4 w-4 text-emerald-500\" />\n </span>\n )}\n {user.emailVerified && (\n <span title={t('admin.users.emailVerified')}>\n <KeyIcon className=\"h-4 w-4 text-blue-500\" />\n </span>\n )}\n </div>\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 md:table-cell\">\n {user.lastLoginAt\n ? format.relativeTime(new Date(user.lastLoginAt))\n : t('admin.users.neverLoggedIn')}\n </td>\n <td className=\"px-4 py-3 text-right\">\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={(event: React.MouseEvent) => {\n event.stopPropagation()\n handleDeleteRequest(user)\n }}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-between border-t border-gray-200/60 px-4 py-3 dark:border-white/10\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {t('admin.users.pagination', { current: currentPage, total: totalPages, count: total })}\n </p>\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n outline\n onClick={handlePreviousPage}\n disabled={offset === 0}\n >\n {t('admin.users.previousPage')}\n </Button>\n <Button\n size=\"sm\"\n outline\n onClick={handleNextPage}\n disabled={offset + PAGE_SIZE >= total}\n >\n {t('admin.users.nextPage')}\n </Button>\n </div>\n </div>\n )}\n </>\n )}\n </SectionCard>\n\n {/* Delete confirmation */}\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n title={t('admin.users.deleteConfirmTitle', { name: deleteTarget?.name ?? deleteTarget?.email ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.users.deleteConfirmButton')}\n cancelLabel={t('admin.users.deleteCancelButton')}\n />\n </>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n GlassModal,\n Input,\n PasswordInput,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { UserPlusIcon } from '@heroicons/react/24/outline'\nimport { PasswordStrengthMeter } from '../auth/components'\n\nexport type { AdminUserFormProps } from '@datatechsolutions/shared-domain'\nimport type { AdminUserFormProps, AdminCreateUserInput } from '@datatechsolutions/shared-domain'\nimport type { AppRole } from '@datatechsolutions/shared-domain'\n\nconst DEFAULT_ROLES: AppRole[] = ['viewer', 'member', 'operator', 'analyst', 'manager', 'admin', 'owner']\n\nexport function AdminUserForm({\n open,\n onClose,\n onSubmit,\n roles = DEFAULT_ROLES,\n}: AdminUserFormProps) {\n const t = useTranslations('windsock')\n\n const [email, setEmail] = useState('')\n const [name, setName] = useState('')\n const [password, setPassword] = useState('')\n const [selectedRole, setSelectedRole] = useState<AppRole>('viewer')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const resetForm = useCallback(() => {\n setEmail('')\n setName('')\n setPassword('')\n setSelectedRole('viewer')\n setError(null)\n }, [])\n\n const handleClose = useCallback(() => {\n resetForm()\n onClose()\n }, [resetForm, onClose])\n\n const handleSubmit = useCallback(async () => {\n if (!email.trim()) {\n setError(t('admin.userForm.errorEmailRequired'))\n triggerHaptic('error')\n return\n }\n\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n const data: AdminCreateUserInput = {\n email: email.trim().toLowerCase(),\n name: name.trim() || undefined,\n password: password || undefined,\n role: selectedRole,\n }\n\n await onSubmit(data)\n triggerHaptic('success')\n resetForm()\n onClose()\n } catch {\n setError(t('admin.userForm.errorCreateFailed'))\n triggerHaptic('error')\n } finally {\n setIsSubmitting(false)\n }\n }, [email, name, password, selectedRole, onSubmit, onClose, resetForm, t])\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={t('admin.userForm.title')}\n subtitle={t('admin.userForm.subtitle')}\n icon={<UserPlusIcon className=\"h-5 w-5 text-white\" />}\n maxWidth=\"md\"\n >\n <form\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n className=\"space-y-4 p-4 sm:p-6\"\n >\n <Input\n label={t('admin.userForm.emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('admin.userForm.emailPlaceholder')}\n disabled={isSubmitting}\n autoComplete=\"email\"\n autoFocus\n />\n\n <Input\n label={t('admin.userForm.nameLabel')}\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('admin.userForm.namePlaceholder')}\n disabled={isSubmitting}\n autoComplete=\"name\"\n />\n\n <PasswordInput\n label={t('admin.userForm.passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('admin.userForm.passwordPlaceholder')}\n disabled={isSubmitting}\n autoComplete=\"new-password\"\n />\n {password && <PasswordStrengthMeter password={password} />}\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-900 dark:text-white\">\n {t('admin.userForm.roleLabel')}\n </label>\n <div className=\"grid grid-cols-3 gap-2 sm:grid-cols-4\">\n {roles.map((role) => (\n <button\n key={role}\n type=\"button\"\n onClick={() => {\n setSelectedRole(role)\n triggerHaptic('light')\n }}\n className={`rounded-xl border px-2 py-2 text-xs font-semibold backdrop-blur-xl transition ${\n selectedRole === role\n ? 'border-indigo-400/80 bg-gradient-to-br from-indigo-100/85 via-white/80 to-sky-100/75 text-slate-900 dark:border-indigo-300/70 dark:bg-[linear-gradient(140deg,rgba(99,102,241,0.32)_0%,rgba(30,41,59,0.72)_100%)] dark:text-indigo-100'\n : 'border-white/55 bg-gradient-to-br from-white/82 via-white/66 to-slate-100/62 text-slate-700 hover:from-white/92 hover:to-sky-100/72 dark:border-white/15 dark:bg-[linear-gradient(140deg,rgba(30,41,59,0.72)_0%,rgba(15,23,42,0.62)_100%)] dark:text-slate-100 dark:hover:bg-[linear-gradient(140deg,rgba(51,65,85,0.76)_0%,rgba(30,41,59,0.68)_100%)]'\n }`}\n >\n {role}\n </button>\n ))}\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{error}</p>\n )}\n\n <div className=\"flex gap-3 pt-2\">\n <Button\n type=\"button\"\n outline\n onClick={handleClose}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n {t('admin.userForm.cancelButton')}\n </Button>\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n loading={isSubmitting}\n disabled={isSubmitting || !email.trim()}\n className=\"flex-1\"\n >\n {t('admin.userForm.createButton')}\n </Button>\n </div>\n </form>\n </GlassModal>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n SearchInput,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n DynamicIslandConfirm,\n triggerHaptic,\n} from '@ui/index'\nimport {\n BuildingOffice2Icon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\nimport type { AuthOrganization } from '@datatechsolutions/shared-domain'\n\nexport type { AdminOrganizationListProps } from '@datatechsolutions/shared-domain'\nimport type { AdminOrganizationListProps } from '@datatechsolutions/shared-domain'\n\nexport function AdminOrganizationList({ client, onOrganizationSelect }: AdminOrganizationListProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [organizations, setOrganizations] = useState<AuthOrganization[]>([])\n const [filteredOrganizations, setFilteredOrganizations] = useState<AuthOrganization[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [search, setSearch] = useState('')\n const [deleteTarget, setDeleteTarget] = useState<AuthOrganization | null>(null)\n const [isDeleting, setIsDeleting] = useState(false)\n\n const fetchOrganizations = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizations()\n setOrganizations(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n fetchOrganizations()\n }, [fetchOrganizations])\n\n useEffect(() => {\n if (!search.trim()) {\n setFilteredOrganizations(organizations)\n return\n }\n const query = search.toLowerCase()\n setFilteredOrganizations(\n organizations.filter((organization) =>\n organization.name.toLowerCase().includes(query) ||\n organization.displayName?.toLowerCase().includes(query) ||\n organization.description?.toLowerCase().includes(query),\n ),\n )\n }, [organizations, search])\n\n const handleOrganizationClick = useCallback((organization: AuthOrganization) => {\n triggerHaptic('light')\n onOrganizationSelect?.(organization)\n }, [onOrganizationSelect])\n\n const handleDeleteRequest = useCallback((organization: AuthOrganization) => {\n triggerHaptic('warning')\n setDeleteTarget(organization)\n }, [])\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!deleteTarget) return\n setIsDeleting(true)\n triggerHaptic('medium')\n try {\n await client.deleteOrganization(deleteTarget.id)\n setDeleteTarget(null)\n triggerHaptic('success')\n fetchOrganizations()\n } catch {\n triggerHaptic('error')\n } finally {\n setIsDeleting(false)\n }\n }, [deleteTarget, client, fetchOrganizations])\n\n const handleDeleteCancel = useCallback(() => {\n triggerHaptic('light')\n setDeleteTarget(null)\n }, [])\n\n return (\n <>\n <SectionCard\n header={{\n icon: <BuildingOffice2Icon className=\"h-5 w-5 text-white\" />,\n title: t('admin.organizations.title'),\n subtitle: t('admin.organizations.subtitle'),\n gradient: 'from-emerald-500 via-teal-500 to-cyan-500',\n }}\n padded={false}\n >\n {/* Search */}\n <div className=\"border-b border-gray-200/60 p-4 dark:border-white/10\">\n <SearchInput\n value={search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setSearch(event.target.value)}\n placeholder={t('admin.organizations.searchPlaceholder')}\n />\n </div>\n\n {/* Content */}\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('admin.organizations.loading')}</span>\n </div>\n ) : filteredOrganizations.length === 0 ? (\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('admin.organizations.emptyMessage')}\n description={t('admin.organizations.emptyDescription')}\n icon={BuildingOffice2Icon}\n variant=\"card\"\n />\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-gray-200/60 dark:border-white/10\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.organizations.columnName')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.organizations.columnDisplayName')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.organizations.columnStatus')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 md:table-cell\">\n {t('admin.organizations.columnCreated')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.organizations.columnActions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {filteredOrganizations.map((organization) => (\n <tr\n key={organization.id}\n className=\"cursor-pointer transition-colors hover:bg-white/40 dark:hover:bg-white/5\"\n onClick={() => handleOrganizationClick(organization)}\n >\n <td className=\"px-4 py-3\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {organization.name}\n </p>\n {organization.description && (\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">\n {organization.description}\n </p>\n )}\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 sm:table-cell\">\n {organization.displayName ?? '—'}\n </td>\n <td className=\"px-4 py-3\">\n <StatusBadge\n status={organization.enabled ? 'active' : 'inactive'}\n label={organization.enabled ? t('admin.organizations.statusEnabled') : t('admin.organizations.statusDisabled')}\n size=\"sm\"\n />\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 md:table-cell\">\n {format.dateTime(new Date(organization.createdAt), {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })}\n </td>\n <td className=\"px-4 py-3 text-right\">\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={(event: React.MouseEvent) => {\n event.stopPropagation()\n handleDeleteRequest(organization)\n }}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </SectionCard>\n\n {/* Delete confirmation */}\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n title={t('admin.organizations.deleteConfirmTitle', { name: deleteTarget?.displayName ?? deleteTarget?.name ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.organizations.deleteConfirmButton')}\n cancelLabel={t('admin.organizations.deleteCancelButton')}\n />\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n GlassModal,\n Input,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { BuildingOffice2Icon } from '@heroicons/react/24/outline'\n\nexport type { AdminOrganizationFormProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminOrganizationFormProps,\n AdminCreateOrganizationInput,\n AdminUpdateOrganizationInput,\n} from '@datatechsolutions/shared-domain'\n\nexport function AdminOrganizationForm({\n open,\n onClose,\n organization,\n onSubmit,\n}: AdminOrganizationFormProps) {\n const t = useTranslations('windsock')\n\n const isEditing = organization !== null && organization !== undefined\n\n const [name, setName] = useState('')\n const [displayName, setDisplayName] = useState('')\n const [description, setDescription] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n if (organization) {\n setName(organization.name)\n setDisplayName(organization.displayName ?? '')\n setDescription(organization.description ?? '')\n } else {\n setName('')\n setDisplayName('')\n setDescription('')\n }\n setError(null)\n }, [organization, open])\n\n const handleClose = useCallback(() => {\n setError(null)\n onClose()\n }, [onClose])\n\n const handleSubmit = useCallback(async () => {\n if (!name.trim()) {\n setError(t('admin.organizationForm.errorNameRequired'))\n triggerHaptic('error')\n return\n }\n\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n if (isEditing) {\n const data: AdminUpdateOrganizationInput = {\n name: name.trim(),\n displayName: displayName.trim() || null,\n description: description.trim() || null,\n }\n await onSubmit(data)\n } else {\n const data: AdminCreateOrganizationInput = {\n name: name.trim(),\n displayName: displayName.trim() || undefined,\n description: description.trim() || undefined,\n }\n await onSubmit(data)\n }\n triggerHaptic('success')\n onClose()\n } catch {\n setError(isEditing\n ? t('admin.organizationForm.errorUpdateFailed')\n : t('admin.organizationForm.errorCreateFailed'),\n )\n triggerHaptic('error')\n } finally {\n setIsSubmitting(false)\n }\n }, [name, displayName, description, isEditing, onSubmit, onClose, t])\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={isEditing ? t('admin.organizationForm.editTitle') : t('admin.organizationForm.createTitle')}\n subtitle={isEditing ? t('admin.organizationForm.editSubtitle') : t('admin.organizationForm.createSubtitle')}\n icon={<BuildingOffice2Icon className=\"h-5 w-5 text-white\" />}\n maxWidth=\"md\"\n >\n <form\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n className=\"space-y-4 p-4 sm:p-6\"\n >\n <Input\n label={t('admin.organizationForm.nameLabel')}\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('admin.organizationForm.namePlaceholder')}\n disabled={isSubmitting}\n autoFocus\n />\n\n <Input\n label={t('admin.organizationForm.displayNameLabel')}\n value={displayName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value)}\n placeholder={t('admin.organizationForm.displayNamePlaceholder')}\n disabled={isSubmitting}\n />\n\n <Input\n label={t('admin.organizationForm.descriptionLabel')}\n value={description}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setDescription(event.target.value)}\n placeholder={t('admin.organizationForm.descriptionPlaceholder')}\n disabled={isSubmitting}\n />\n\n {error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{error}</p>\n )}\n\n <div className=\"flex gap-3 pt-2\">\n <Button\n type=\"button\"\n outline\n onClick={handleClose}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n {t('admin.organizationForm.cancelButton')}\n </Button>\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n loading={isSubmitting}\n disabled={isSubmitting || !name.trim()}\n className=\"flex-1\"\n >\n {isEditing ? t('admin.organizationForm.saveButton') : t('admin.organizationForm.createButton')}\n </Button>\n </div>\n </form>\n </GlassModal>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n Input,\n SearchInput,\n Badge,\n EmptyState,\n InlineSpinner,\n Sheet,\n DynamicIslandConfirm,\n triggerHaptic,\n} from '@ui/index'\nimport {\n KeyIcon,\n PlusIcon,\n PencilSquareIcon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\nimport type { AdminPermission } from '@datatechsolutions/shared-domain'\n\nexport type { AdminPermissionListProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminPermissionListProps,\n AdminCreatePermissionInput,\n AdminUpdatePermissionInput,\n} from '@datatechsolutions/shared-domain'\n\nexport function AdminPermissionList({ client }: AdminPermissionListProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [permissions, setPermissions] = useState<AdminPermission[]>([])\n const [filteredPermissions, setFilteredPermissions] = useState<AdminPermission[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [search, setSearch] = useState('')\n\n // Form state\n const [isFormOpen, setIsFormOpen] = useState(false)\n const [editingPermission, setEditingPermission] = useState<AdminPermission | null>(null)\n const [formId, setFormId] = useState('')\n const [formName, setFormName] = useState('')\n const [formDescription, setFormDescription] = useState('')\n const [formResource, setFormResource] = useState('')\n const [formAction, setFormAction] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [formError, setFormError] = useState<string | null>(null)\n\n // Delete state\n const [deleteTarget, setDeleteTarget] = useState<AdminPermission | null>(null)\n const [isDeleting, setIsDeleting] = useState(false)\n\n const fetchPermissions = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listPermissions()\n setPermissions(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n fetchPermissions()\n }, [fetchPermissions])\n\n useEffect(() => {\n if (!search.trim()) {\n setFilteredPermissions(permissions)\n return\n }\n const query = search.toLowerCase()\n setFilteredPermissions(\n permissions.filter((permission) =>\n permission.name.toLowerCase().includes(query) ||\n permission.description?.toLowerCase().includes(query) ||\n permission.resource?.toLowerCase().includes(query) ||\n permission.action?.toLowerCase().includes(query),\n ),\n )\n }, [permissions, search])\n\n // ── Form handlers ───────────────────────────────────────────────────\n\n const handleOpenCreate = useCallback(() => {\n triggerHaptic('light')\n setEditingPermission(null)\n setFormId('')\n setFormName('')\n setFormDescription('')\n setFormResource('')\n setFormAction('')\n setFormError(null)\n setIsFormOpen(true)\n }, [])\n\n const handleOpenEdit = useCallback((permission: AdminPermission) => {\n triggerHaptic('light')\n setEditingPermission(permission)\n setFormId(permission.id)\n setFormName(permission.name)\n setFormDescription(permission.description ?? '')\n setFormResource(permission.resource ?? '')\n setFormAction(permission.action ?? '')\n setFormError(null)\n setIsFormOpen(true)\n }, [])\n\n const handleCloseForm = useCallback(() => {\n triggerHaptic('light')\n setIsFormOpen(false)\n }, [])\n\n const handleSubmitForm = useCallback(async () => {\n const isEditing = editingPermission !== null\n\n if (!isEditing && !formId.trim()) {\n setFormError(t('admin.permissions.errorIdRequired'))\n triggerHaptic('error')\n return\n }\n if (!formName.trim()) {\n setFormError(t('admin.permissions.errorNameRequired'))\n triggerHaptic('error')\n return\n }\n\n setFormError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n if (isEditing) {\n const data: AdminUpdatePermissionInput = {\n name: formName.trim(),\n description: formDescription.trim() || undefined,\n resource: formResource.trim() || undefined,\n action: formAction.trim() || undefined,\n }\n await client.updatePermission(editingPermission.id, data)\n } else {\n const data: AdminCreatePermissionInput = {\n id: formId.trim(),\n name: formName.trim(),\n description: formDescription.trim() || undefined,\n resource: formResource.trim() || undefined,\n action: formAction.trim() || undefined,\n }\n await client.createPermission(data)\n }\n triggerHaptic('success')\n setIsFormOpen(false)\n fetchPermissions()\n } catch {\n setFormError(\n isEditing\n ? t('admin.permissions.errorUpdateFailed')\n : t('admin.permissions.errorCreateFailed'),\n )\n triggerHaptic('error')\n } finally {\n setIsSubmitting(false)\n }\n }, [editingPermission, formId, formName, formDescription, formResource, formAction, client, fetchPermissions, t])\n\n // ── Delete handlers ─────────────────────────────────────────────────\n\n const handleDeleteRequest = useCallback((permission: AdminPermission) => {\n triggerHaptic('warning')\n setDeleteTarget(permission)\n }, [])\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!deleteTarget) return\n setIsDeleting(true)\n triggerHaptic('medium')\n try {\n await client.deletePermission(deleteTarget.id)\n setDeleteTarget(null)\n triggerHaptic('success')\n fetchPermissions()\n } catch {\n triggerHaptic('error')\n } finally {\n setIsDeleting(false)\n }\n }, [deleteTarget, client, fetchPermissions])\n\n const handleDeleteCancel = useCallback(() => {\n triggerHaptic('light')\n setDeleteTarget(null)\n }, [])\n\n return (\n <>\n <SectionCard\n header={{\n icon: <KeyIcon className=\"h-5 w-5 text-white\" />,\n title: t('admin.permissions.title'),\n subtitle: t('admin.permissions.subtitle'),\n gradient: 'from-violet-500 via-purple-500 to-pink-500',\n rightContent: (\n <Button size=\"sm\" color=\"ios-glass-blue\" onClick={handleOpenCreate}>\n <PlusIcon className=\"mr-1 h-3.5 w-3.5\" />\n {t('admin.permissions.createButton')}\n </Button>\n ),\n }}\n padded={false}\n >\n {/* Search */}\n <div className=\"border-b border-gray-200/60 p-4 dark:border-white/10\">\n <SearchInput\n value={search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setSearch(event.target.value)}\n placeholder={t('admin.permissions.searchPlaceholder')}\n />\n </div>\n\n {/* Content */}\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('admin.permissions.loading')}</span>\n </div>\n ) : filteredPermissions.length === 0 ? (\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('admin.permissions.emptyMessage')}\n description={t('admin.permissions.emptyDescription')}\n icon={KeyIcon}\n action={{\n label: t('admin.permissions.createButton'),\n onClick: handleOpenCreate,\n }}\n variant=\"card\"\n />\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-gray-200/60 dark:border-white/10\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.permissions.columnName')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.permissions.columnResource')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.permissions.columnAction')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 md:table-cell\">\n {t('admin.permissions.columnCreated')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.permissions.columnActions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {filteredPermissions.map((permission) => (\n <tr key={permission.id} className=\"transition-colors hover:bg-white/40 dark:hover:bg-white/5\">\n <td className=\"px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {permission.name}\n </p>\n {permission.description && (\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">\n {permission.description}\n </p>\n )}\n </div>\n </td>\n <td className=\"hidden px-4 py-3 sm:table-cell\">\n {permission.resource ? (\n <Badge color=\"blue\">{permission.resource}</Badge>\n ) : (\n <span className=\"text-gray-400 dark:text-gray-500\">—</span>\n )}\n </td>\n <td className=\"hidden px-4 py-3 sm:table-cell\">\n {permission.action ? (\n <Badge color=\"amber\">{permission.action}</Badge>\n ) : (\n <span className=\"text-gray-400 dark:text-gray-500\">—</span>\n )}\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 md:table-cell\">\n {format.dateTime(new Date(permission.createdAt), {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })}\n </td>\n <td className=\"px-4 py-3 text-right\">\n <div className=\"flex items-center justify-end gap-1\">\n <Button\n size=\"sm\"\n outline\n onClick={() => handleOpenEdit(permission)}\n >\n <PencilSquareIcon className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleDeleteRequest(permission)}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </SectionCard>\n\n {/* Create/Edit permission sheet */}\n <Sheet\n open={isFormOpen}\n onClose={handleCloseForm}\n title={editingPermission\n ? t('admin.permissions.editSheetTitle')\n : t('admin.permissions.createSheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n {!editingPermission && (\n <Input\n label={t('admin.permissions.formIdLabel')}\n value={formId}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormId(event.target.value)}\n placeholder={t('admin.permissions.formIdPlaceholder')}\n disabled={isSubmitting}\n autoFocus\n />\n )}\n\n <Input\n label={t('admin.permissions.formNameLabel')}\n value={formName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormName(event.target.value)}\n placeholder={t('admin.permissions.formNamePlaceholder')}\n disabled={isSubmitting}\n autoFocus={!!editingPermission}\n />\n\n <Input\n label={t('admin.permissions.formDescriptionLabel')}\n value={formDescription}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormDescription(event.target.value)}\n placeholder={t('admin.permissions.formDescriptionPlaceholder')}\n disabled={isSubmitting}\n />\n\n <div className=\"grid grid-cols-2 gap-3\">\n <Input\n label={t('admin.permissions.formResourceLabel')}\n value={formResource}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormResource(event.target.value)}\n placeholder={t('admin.permissions.formResourcePlaceholder')}\n disabled={isSubmitting}\n />\n <Input\n label={t('admin.permissions.formActionLabel')}\n value={formAction}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormAction(event.target.value)}\n placeholder={t('admin.permissions.formActionPlaceholder')}\n disabled={isSubmitting}\n />\n </div>\n\n {formError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{formError}</p>\n )}\n\n <div className=\"flex gap-3\">\n <Button\n outline\n onClick={handleCloseForm}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n {t('admin.permissions.formCancelButton')}\n </Button>\n <Button\n color=\"ios-glass-blue\"\n onClick={handleSubmitForm}\n loading={isSubmitting}\n disabled={isSubmitting || !formName.trim() || (!editingPermission && !formId.trim())}\n className=\"flex-1\"\n >\n {editingPermission\n ? t('admin.permissions.formSaveButton')\n : t('admin.permissions.formCreateButton')}\n </Button>\n </div>\n </div>\n </Sheet>\n\n {/* Delete confirmation */}\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n title={t('admin.permissions.deleteConfirmTitle', { name: deleteTarget?.name ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.permissions.deleteConfirmButton')}\n cancelLabel={t('admin.permissions.deleteCancelButton')}\n />\n </>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/platform/admin/admin-user-list.tsx","../src/platform/admin/admin-user-form.tsx","../src/platform/admin/admin-organization-list.tsx","../src/platform/admin/admin-organization-form.tsx","../src/platform/admin/admin-permission-list.tsx"],"names":["useTranslations","useFormatter","useState","useCallback","useEffect","triggerHaptic","jsxs","Fragment","SectionCard","jsx","UsersIcon","SearchInput","InlineSpinner","EmptyState","Avatar","Badge","StatusBadge","ShieldCheckIcon","KeyIcon","Button","TrashIcon","DynamicIslandConfirm","GlassModal","UserPlusIcon","Input","PasswordInput","PasswordStrengthMeter","BuildingOffice2Icon","PlusIcon","PencilSquareIcon","Sheet"],"mappings":"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","file":"chunk-VMGNQFRO.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n SearchInput,\n Badge,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n DynamicIslandConfirm,\n Avatar,\n triggerHaptic,\n} from '@ui/index'\nimport {\n UsersIcon,\n PlusIcon,\n TrashIcon,\n KeyIcon,\n ShieldCheckIcon,\n} from '@heroicons/react/24/outline'\n\nexport type { AdminUserListProps } from '@datatechsolutions/shared-domain'\nimport type { AdminUserListProps, AdminUserSummary } from '@datatechsolutions/shared-domain'\n\nconst PAGE_SIZE = 20\n\nexport function AdminUserList({ client, onUserSelect }: AdminUserListProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [users, setUsers] = useState<AdminUserSummary[]>([])\n const [total, setTotal] = useState(0)\n const [isLoading, setIsLoading] = useState(true)\n const [search, setSearch] = useState('')\n const [offset, setOffset] = useState(0)\n const [deleteTarget, setDeleteTarget] = useState<AdminUserSummary | null>(null)\n const [isDeletingUser, setIsDeletingUser] = useState(false)\n\n const fetchUsers = useCallback(async (searchQuery: string, pageOffset: number) => {\n setIsLoading(true)\n try {\n const result = await client.listUsers({\n search: searchQuery || undefined,\n limit: PAGE_SIZE,\n offset: pageOffset,\n })\n setUsers(result.items)\n setTotal(result.total)\n } catch {\n // Fail gracefully — show empty state\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n fetchUsers(search, offset)\n }, [fetchUsers, search, offset])\n\n const handleSearch = useCallback((value: string) => {\n setSearch(value)\n setOffset(0)\n }, [])\n\n const handleNextPage = useCallback(() => {\n triggerHaptic('light')\n setOffset((previous) => previous + PAGE_SIZE)\n }, [])\n\n const handlePreviousPage = useCallback(() => {\n triggerHaptic('light')\n setOffset((previous) => Math.max(0, previous - PAGE_SIZE))\n }, [])\n\n const handleDeleteRequest = useCallback((user: AdminUserSummary) => {\n triggerHaptic('warning')\n setDeleteTarget(user)\n }, [])\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!deleteTarget) return\n setIsDeletingUser(true)\n triggerHaptic('medium')\n try {\n await client.deleteUser(deleteTarget.id)\n setDeleteTarget(null)\n triggerHaptic('success')\n fetchUsers(search, offset)\n } catch {\n triggerHaptic('error')\n } finally {\n setIsDeletingUser(false)\n }\n }, [deleteTarget, client, fetchUsers, search, offset])\n\n const handleDeleteCancel = useCallback(() => {\n triggerHaptic('light')\n setDeleteTarget(null)\n }, [])\n\n const handleUserClick = useCallback((user: AdminUserSummary) => {\n triggerHaptic('light')\n onUserSelect?.(user)\n }, [onUserSelect])\n\n const totalPages = Math.ceil(total / PAGE_SIZE)\n const currentPage = Math.floor(offset / PAGE_SIZE) + 1\n\n const roleBadgeColor = (role: string) => {\n if (role === 'owner' || role === 'super_admin') return 'purple' as const\n if (role === 'admin') return 'blue' as const\n if (role === 'manager') return 'amber' as const\n return 'zinc' as const\n }\n\n return (\n <>\n <SectionCard\n header={{\n icon: <UsersIcon className=\"h-5 w-5 text-white\" />,\n title: t('admin.users.title'),\n subtitle: t('admin.users.subtitle'),\n gradient: 'from-blue-500 via-indigo-500 to-violet-500',\n }}\n padded={false}\n >\n {/* Search + filters */}\n <div className=\"border-b border-gray-200/60 p-4 dark:border-white/10\">\n <SearchInput\n value={search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => handleSearch(event.target.value)}\n placeholder={t('admin.users.searchPlaceholder')}\n />\n </div>\n\n {/* Content */}\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('admin.users.loading')}</span>\n </div>\n ) : users.length === 0 ? (\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('admin.users.emptyMessage')}\n description={t('admin.users.emptyDescription')}\n icon={UsersIcon}\n variant=\"card\"\n />\n </div>\n ) : (\n <>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-gray-200/60 dark:border-white/10\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnUser')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnRole')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnStatus')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.users.columnSecurity')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 md:table-cell\">\n {t('admin.users.columnLastLogin')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.users.columnActions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {users.map((user) => (\n <tr\n key={user.id}\n className=\"cursor-pointer transition-colors hover:bg-white/40 dark:hover:bg-white/5\"\n onClick={() => handleUserClick(user)}\n >\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <Avatar\n src={user.image ?? undefined}\n initials={(user.name ?? user.email).slice(0, 2).toUpperCase()}\n alt={user.name ?? user.email}\n />\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-gray-900 dark:text-white\">\n {user.name ?? user.email}\n </p>\n <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">\n {user.email}\n </p>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <Badge color={roleBadgeColor(user.role)}>{user.role}</Badge>\n </td>\n <td className=\"px-4 py-3\">\n <StatusBadge\n status={user.status === 'active' ? 'active' : 'inactive'}\n label={user.status}\n size=\"sm\"\n />\n </td>\n <td className=\"hidden px-4 py-3 sm:table-cell\">\n <div className=\"flex items-center gap-2\">\n {user.mfaEnabled && (\n <span title={t('admin.users.mfaEnabled')}>\n <ShieldCheckIcon className=\"h-4 w-4 text-emerald-500\" />\n </span>\n )}\n {user.emailVerified && (\n <span title={t('admin.users.emailVerified')}>\n <KeyIcon className=\"h-4 w-4 text-blue-500\" />\n </span>\n )}\n </div>\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 md:table-cell\">\n {user.lastLoginAt\n ? format.relativeTime(new Date(user.lastLoginAt))\n : t('admin.users.neverLoggedIn')}\n </td>\n <td className=\"px-4 py-3 text-right\">\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={(event: React.MouseEvent) => {\n event.stopPropagation()\n handleDeleteRequest(user)\n }}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-between border-t border-gray-200/60 px-4 py-3 dark:border-white/10\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {t('admin.users.pagination', { current: currentPage, total: totalPages, count: total })}\n </p>\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n outline\n onClick={handlePreviousPage}\n disabled={offset === 0}\n >\n {t('admin.users.previousPage')}\n </Button>\n <Button\n size=\"sm\"\n outline\n onClick={handleNextPage}\n disabled={offset + PAGE_SIZE >= total}\n >\n {t('admin.users.nextPage')}\n </Button>\n </div>\n </div>\n )}\n </>\n )}\n </SectionCard>\n\n {/* Delete confirmation */}\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n title={t('admin.users.deleteConfirmTitle', { name: deleteTarget?.name ?? deleteTarget?.email ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.users.deleteConfirmButton')}\n cancelLabel={t('admin.users.deleteCancelButton')}\n />\n </>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n GlassModal,\n Input,\n PasswordInput,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { UserPlusIcon } from '@heroicons/react/24/outline'\nimport { PasswordStrengthMeter } from '../auth/components'\n\nexport type { AdminUserFormProps } from '@datatechsolutions/shared-domain'\nimport type { AdminUserFormProps, AdminCreateUserInput } from '@datatechsolutions/shared-domain'\nimport type { AppRole } from '@datatechsolutions/shared-domain'\n\nconst DEFAULT_ROLES: AppRole[] = ['viewer', 'member', 'operator', 'analyst', 'manager', 'admin', 'owner']\n\nexport function AdminUserForm({\n open,\n onClose,\n onSubmit,\n roles = DEFAULT_ROLES,\n}: AdminUserFormProps) {\n const t = useTranslations('windsock')\n\n const [email, setEmail] = useState('')\n const [name, setName] = useState('')\n const [password, setPassword] = useState('')\n const [selectedRole, setSelectedRole] = useState<AppRole>('viewer')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const resetForm = useCallback(() => {\n setEmail('')\n setName('')\n setPassword('')\n setSelectedRole('viewer')\n setError(null)\n }, [])\n\n const handleClose = useCallback(() => {\n resetForm()\n onClose()\n }, [resetForm, onClose])\n\n const handleSubmit = useCallback(async () => {\n if (!email.trim()) {\n setError(t('admin.userForm.errorEmailRequired'))\n triggerHaptic('error')\n return\n }\n\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n const data: AdminCreateUserInput = {\n email: email.trim().toLowerCase(),\n name: name.trim() || undefined,\n password: password || undefined,\n role: selectedRole,\n }\n\n await onSubmit(data)\n triggerHaptic('success')\n resetForm()\n onClose()\n } catch {\n setError(t('admin.userForm.errorCreateFailed'))\n triggerHaptic('error')\n } finally {\n setIsSubmitting(false)\n }\n }, [email, name, password, selectedRole, onSubmit, onClose, resetForm, t])\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={t('admin.userForm.title')}\n subtitle={t('admin.userForm.subtitle')}\n icon={<UserPlusIcon className=\"h-5 w-5 text-white\" />}\n maxWidth=\"md\"\n >\n <form\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n className=\"space-y-4 p-4 sm:p-6\"\n >\n <Input\n label={t('admin.userForm.emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('admin.userForm.emailPlaceholder')}\n disabled={isSubmitting}\n autoComplete=\"email\"\n autoFocus\n />\n\n <Input\n label={t('admin.userForm.nameLabel')}\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('admin.userForm.namePlaceholder')}\n disabled={isSubmitting}\n autoComplete=\"name\"\n />\n\n <PasswordInput\n label={t('admin.userForm.passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('admin.userForm.passwordPlaceholder')}\n disabled={isSubmitting}\n autoComplete=\"new-password\"\n />\n {password && <PasswordStrengthMeter password={password} />}\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-900 dark:text-white\">\n {t('admin.userForm.roleLabel')}\n </label>\n <div className=\"grid grid-cols-3 gap-2 sm:grid-cols-4\">\n {roles.map((role) => (\n <button\n key={role}\n type=\"button\"\n onClick={() => {\n setSelectedRole(role)\n triggerHaptic('light')\n }}\n className={`rounded-xl border px-2 py-2 text-xs font-semibold backdrop-blur-xl transition ${\n selectedRole === role\n ? 'border-indigo-400/80 bg-gradient-to-br from-indigo-100/85 via-white/80 to-sky-100/75 text-slate-900 dark:border-indigo-300/70 dark:bg-[linear-gradient(140deg,rgba(99,102,241,0.32)_0%,rgba(30,41,59,0.72)_100%)] dark:text-indigo-100'\n : 'border-white/55 bg-gradient-to-br from-white/82 via-white/66 to-slate-100/62 text-slate-700 hover:from-white/92 hover:to-sky-100/72 dark:border-white/15 dark:bg-[linear-gradient(140deg,rgba(30,41,59,0.72)_0%,rgba(15,23,42,0.62)_100%)] dark:text-slate-100 dark:hover:bg-[linear-gradient(140deg,rgba(51,65,85,0.76)_0%,rgba(30,41,59,0.68)_100%)]'\n }`}\n >\n {role}\n </button>\n ))}\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{error}</p>\n )}\n\n <div className=\"flex gap-3 pt-2\">\n <Button\n type=\"button\"\n outline\n onClick={handleClose}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n {t('admin.userForm.cancelButton')}\n </Button>\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n loading={isSubmitting}\n disabled={isSubmitting || !email.trim()}\n className=\"flex-1\"\n >\n {t('admin.userForm.createButton')}\n </Button>\n </div>\n </form>\n </GlassModal>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n SearchInput,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n DynamicIslandConfirm,\n triggerHaptic,\n} from '@ui/index'\nimport {\n BuildingOffice2Icon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\nimport type { AuthOrganization } from '@datatechsolutions/shared-domain'\n\nexport type { AdminOrganizationListProps } from '@datatechsolutions/shared-domain'\nimport type { AdminOrganizationListProps } from '@datatechsolutions/shared-domain'\n\nexport function AdminOrganizationList({ client, onOrganizationSelect }: AdminOrganizationListProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [organizations, setOrganizations] = useState<AuthOrganization[]>([])\n const [filteredOrganizations, setFilteredOrganizations] = useState<AuthOrganization[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [search, setSearch] = useState('')\n const [deleteTarget, setDeleteTarget] = useState<AuthOrganization | null>(null)\n const [isDeleting, setIsDeleting] = useState(false)\n\n const fetchOrganizations = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizations()\n setOrganizations(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n fetchOrganizations()\n }, [fetchOrganizations])\n\n useEffect(() => {\n if (!search.trim()) {\n setFilteredOrganizations(organizations)\n return\n }\n const query = search.toLowerCase()\n setFilteredOrganizations(\n organizations.filter((organization) =>\n organization.name.toLowerCase().includes(query) ||\n organization.displayName?.toLowerCase().includes(query) ||\n organization.description?.toLowerCase().includes(query),\n ),\n )\n }, [organizations, search])\n\n const handleOrganizationClick = useCallback((organization: AuthOrganization) => {\n triggerHaptic('light')\n onOrganizationSelect?.(organization)\n }, [onOrganizationSelect])\n\n const handleDeleteRequest = useCallback((organization: AuthOrganization) => {\n triggerHaptic('warning')\n setDeleteTarget(organization)\n }, [])\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!deleteTarget) return\n setIsDeleting(true)\n triggerHaptic('medium')\n try {\n await client.deleteOrganization(deleteTarget.id)\n setDeleteTarget(null)\n triggerHaptic('success')\n fetchOrganizations()\n } catch {\n triggerHaptic('error')\n } finally {\n setIsDeleting(false)\n }\n }, [deleteTarget, client, fetchOrganizations])\n\n const handleDeleteCancel = useCallback(() => {\n triggerHaptic('light')\n setDeleteTarget(null)\n }, [])\n\n return (\n <>\n <SectionCard\n header={{\n icon: <BuildingOffice2Icon className=\"h-5 w-5 text-white\" />,\n title: t('admin.organizations.title'),\n subtitle: t('admin.organizations.subtitle'),\n gradient: 'from-emerald-500 via-teal-500 to-cyan-500',\n }}\n padded={false}\n >\n {/* Search */}\n <div className=\"border-b border-gray-200/60 p-4 dark:border-white/10\">\n <SearchInput\n value={search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setSearch(event.target.value)}\n placeholder={t('admin.organizations.searchPlaceholder')}\n />\n </div>\n\n {/* Content */}\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('admin.organizations.loading')}</span>\n </div>\n ) : filteredOrganizations.length === 0 ? (\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('admin.organizations.emptyMessage')}\n description={t('admin.organizations.emptyDescription')}\n icon={BuildingOffice2Icon}\n variant=\"card\"\n />\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-gray-200/60 dark:border-white/10\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.organizations.columnName')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.organizations.columnDisplayName')}\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.organizations.columnStatus')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 md:table-cell\">\n {t('admin.organizations.columnCreated')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.organizations.columnActions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {filteredOrganizations.map((organization) => (\n <tr\n key={organization.id}\n className=\"cursor-pointer transition-colors hover:bg-white/40 dark:hover:bg-white/5\"\n onClick={() => handleOrganizationClick(organization)}\n >\n <td className=\"px-4 py-3\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {organization.name}\n </p>\n {organization.description && (\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">\n {organization.description}\n </p>\n )}\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 sm:table-cell\">\n {organization.displayName ?? '—'}\n </td>\n <td className=\"px-4 py-3\">\n <StatusBadge\n status={organization.enabled ? 'active' : 'inactive'}\n label={organization.enabled ? t('admin.organizations.statusEnabled') : t('admin.organizations.statusDisabled')}\n size=\"sm\"\n />\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 md:table-cell\">\n {format.dateTime(new Date(organization.createdAt), {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })}\n </td>\n <td className=\"px-4 py-3 text-right\">\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={(event: React.MouseEvent) => {\n event.stopPropagation()\n handleDeleteRequest(organization)\n }}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </SectionCard>\n\n {/* Delete confirmation */}\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n title={t('admin.organizations.deleteConfirmTitle', { name: deleteTarget?.displayName ?? deleteTarget?.name ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.organizations.deleteConfirmButton')}\n cancelLabel={t('admin.organizations.deleteCancelButton')}\n />\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n GlassModal,\n Input,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { BuildingOffice2Icon } from '@heroicons/react/24/outline'\n\nexport type { AdminOrganizationFormProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminOrganizationFormProps,\n AdminCreateOrganizationInput,\n AdminUpdateOrganizationInput,\n} from '@datatechsolutions/shared-domain'\n\nexport function AdminOrganizationForm({\n open,\n onClose,\n organization,\n onSubmit,\n}: AdminOrganizationFormProps) {\n const t = useTranslations('windsock')\n\n const isEditing = organization !== null && organization !== undefined\n\n const [name, setName] = useState('')\n const [displayName, setDisplayName] = useState('')\n const [description, setDescription] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n if (organization) {\n setName(organization.name)\n setDisplayName(organization.displayName ?? '')\n setDescription(organization.description ?? '')\n } else {\n setName('')\n setDisplayName('')\n setDescription('')\n }\n setError(null)\n }, [organization, open])\n\n const handleClose = useCallback(() => {\n setError(null)\n onClose()\n }, [onClose])\n\n const handleSubmit = useCallback(async () => {\n if (!name.trim()) {\n setError(t('admin.organizationForm.errorNameRequired'))\n triggerHaptic('error')\n return\n }\n\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n if (isEditing) {\n const data: AdminUpdateOrganizationInput = {\n name: name.trim(),\n displayName: displayName.trim() || null,\n description: description.trim() || null,\n }\n await onSubmit(data)\n } else {\n const data: AdminCreateOrganizationInput = {\n name: name.trim(),\n displayName: displayName.trim() || undefined,\n description: description.trim() || undefined,\n }\n await onSubmit(data)\n }\n triggerHaptic('success')\n onClose()\n } catch {\n setError(isEditing\n ? t('admin.organizationForm.errorUpdateFailed')\n : t('admin.organizationForm.errorCreateFailed'),\n )\n triggerHaptic('error')\n } finally {\n setIsSubmitting(false)\n }\n }, [name, displayName, description, isEditing, onSubmit, onClose, t])\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={isEditing ? t('admin.organizationForm.editTitle') : t('admin.organizationForm.createTitle')}\n subtitle={isEditing ? t('admin.organizationForm.editSubtitle') : t('admin.organizationForm.createSubtitle')}\n icon={<BuildingOffice2Icon className=\"h-5 w-5 text-white\" />}\n maxWidth=\"md\"\n >\n <form\n onSubmit={(event) => {\n event.preventDefault()\n handleSubmit()\n }}\n className=\"space-y-4 p-4 sm:p-6\"\n >\n <Input\n label={t('admin.organizationForm.nameLabel')}\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('admin.organizationForm.namePlaceholder')}\n disabled={isSubmitting}\n autoFocus\n />\n\n <Input\n label={t('admin.organizationForm.displayNameLabel')}\n value={displayName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value)}\n placeholder={t('admin.organizationForm.displayNamePlaceholder')}\n disabled={isSubmitting}\n />\n\n <Input\n label={t('admin.organizationForm.descriptionLabel')}\n value={description}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setDescription(event.target.value)}\n placeholder={t('admin.organizationForm.descriptionPlaceholder')}\n disabled={isSubmitting}\n />\n\n {error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{error}</p>\n )}\n\n <div className=\"flex gap-3 pt-2\">\n <Button\n type=\"button\"\n outline\n onClick={handleClose}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n {t('admin.organizationForm.cancelButton')}\n </Button>\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n loading={isSubmitting}\n disabled={isSubmitting || !name.trim()}\n className=\"flex-1\"\n >\n {isEditing ? t('admin.organizationForm.saveButton') : t('admin.organizationForm.createButton')}\n </Button>\n </div>\n </form>\n </GlassModal>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n Input,\n SearchInput,\n Badge,\n EmptyState,\n InlineSpinner,\n Sheet,\n DynamicIslandConfirm,\n triggerHaptic,\n} from '@ui/index'\nimport {\n KeyIcon,\n PlusIcon,\n PencilSquareIcon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\nimport type { AdminPermission } from '@datatechsolutions/shared-domain'\n\nexport type { AdminPermissionListProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminPermissionListProps,\n AdminCreatePermissionInput,\n AdminUpdatePermissionInput,\n} from '@datatechsolutions/shared-domain'\n\nexport function AdminPermissionList({ client }: AdminPermissionListProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [permissions, setPermissions] = useState<AdminPermission[]>([])\n const [filteredPermissions, setFilteredPermissions] = useState<AdminPermission[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [search, setSearch] = useState('')\n\n // Form state\n const [isFormOpen, setIsFormOpen] = useState(false)\n const [editingPermission, setEditingPermission] = useState<AdminPermission | null>(null)\n const [formId, setFormId] = useState('')\n const [formName, setFormName] = useState('')\n const [formDescription, setFormDescription] = useState('')\n const [formResource, setFormResource] = useState('')\n const [formAction, setFormAction] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [formError, setFormError] = useState<string | null>(null)\n\n // Delete state\n const [deleteTarget, setDeleteTarget] = useState<AdminPermission | null>(null)\n const [isDeleting, setIsDeleting] = useState(false)\n\n const fetchPermissions = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listPermissions()\n setPermissions(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n fetchPermissions()\n }, [fetchPermissions])\n\n useEffect(() => {\n if (!search.trim()) {\n setFilteredPermissions(permissions)\n return\n }\n const query = search.toLowerCase()\n setFilteredPermissions(\n permissions.filter((permission) =>\n permission.name.toLowerCase().includes(query) ||\n permission.description?.toLowerCase().includes(query) ||\n permission.resource?.toLowerCase().includes(query) ||\n permission.action?.toLowerCase().includes(query),\n ),\n )\n }, [permissions, search])\n\n // ── Form handlers ───────────────────────────────────────────────────\n\n const handleOpenCreate = useCallback(() => {\n triggerHaptic('light')\n setEditingPermission(null)\n setFormId('')\n setFormName('')\n setFormDescription('')\n setFormResource('')\n setFormAction('')\n setFormError(null)\n setIsFormOpen(true)\n }, [])\n\n const handleOpenEdit = useCallback((permission: AdminPermission) => {\n triggerHaptic('light')\n setEditingPermission(permission)\n setFormId(permission.id)\n setFormName(permission.name)\n setFormDescription(permission.description ?? '')\n setFormResource(permission.resource ?? '')\n setFormAction(permission.action ?? '')\n setFormError(null)\n setIsFormOpen(true)\n }, [])\n\n const handleCloseForm = useCallback(() => {\n triggerHaptic('light')\n setIsFormOpen(false)\n }, [])\n\n const handleSubmitForm = useCallback(async () => {\n const isEditing = editingPermission !== null\n\n if (!isEditing && !formId.trim()) {\n setFormError(t('admin.permissions.errorIdRequired'))\n triggerHaptic('error')\n return\n }\n if (!formName.trim()) {\n setFormError(t('admin.permissions.errorNameRequired'))\n triggerHaptic('error')\n return\n }\n\n setFormError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n if (isEditing) {\n const data: AdminUpdatePermissionInput = {\n name: formName.trim(),\n description: formDescription.trim() || undefined,\n resource: formResource.trim() || undefined,\n action: formAction.trim() || undefined,\n }\n await client.updatePermission(editingPermission.id, data)\n } else {\n const data: AdminCreatePermissionInput = {\n id: formId.trim(),\n name: formName.trim(),\n description: formDescription.trim() || undefined,\n resource: formResource.trim() || undefined,\n action: formAction.trim() || undefined,\n }\n await client.createPermission(data)\n }\n triggerHaptic('success')\n setIsFormOpen(false)\n fetchPermissions()\n } catch {\n setFormError(\n isEditing\n ? t('admin.permissions.errorUpdateFailed')\n : t('admin.permissions.errorCreateFailed'),\n )\n triggerHaptic('error')\n } finally {\n setIsSubmitting(false)\n }\n }, [editingPermission, formId, formName, formDescription, formResource, formAction, client, fetchPermissions, t])\n\n // ── Delete handlers ─────────────────────────────────────────────────\n\n const handleDeleteRequest = useCallback((permission: AdminPermission) => {\n triggerHaptic('warning')\n setDeleteTarget(permission)\n }, [])\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!deleteTarget) return\n setIsDeleting(true)\n triggerHaptic('medium')\n try {\n await client.deletePermission(deleteTarget.id)\n setDeleteTarget(null)\n triggerHaptic('success')\n fetchPermissions()\n } catch {\n triggerHaptic('error')\n } finally {\n setIsDeleting(false)\n }\n }, [deleteTarget, client, fetchPermissions])\n\n const handleDeleteCancel = useCallback(() => {\n triggerHaptic('light')\n setDeleteTarget(null)\n }, [])\n\n return (\n <>\n <SectionCard\n header={{\n icon: <KeyIcon className=\"h-5 w-5 text-white\" />,\n title: t('admin.permissions.title'),\n subtitle: t('admin.permissions.subtitle'),\n gradient: 'from-violet-500 via-purple-500 to-pink-500',\n rightContent: (\n <Button size=\"sm\" color=\"ios-glass-blue\" onClick={handleOpenCreate}>\n <PlusIcon className=\"mr-1 h-3.5 w-3.5\" />\n {t('admin.permissions.createButton')}\n </Button>\n ),\n }}\n padded={false}\n >\n {/* Search */}\n <div className=\"border-b border-gray-200/60 p-4 dark:border-white/10\">\n <SearchInput\n value={search}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setSearch(event.target.value)}\n placeholder={t('admin.permissions.searchPlaceholder')}\n />\n </div>\n\n {/* Content */}\n {isLoading ? (\n <div className=\"flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('admin.permissions.loading')}</span>\n </div>\n ) : filteredPermissions.length === 0 ? (\n <div className=\"p-4 sm:p-6\">\n <EmptyState\n message={t('admin.permissions.emptyMessage')}\n description={t('admin.permissions.emptyDescription')}\n icon={KeyIcon}\n action={{\n label: t('admin.permissions.createButton'),\n onClick: handleOpenCreate,\n }}\n variant=\"card\"\n />\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-gray-200/60 dark:border-white/10\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.permissions.columnName')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.permissions.columnResource')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 sm:table-cell\">\n {t('admin.permissions.columnAction')}\n </th>\n <th className=\"hidden px-4 py-3 text-left text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400 md:table-cell\">\n {t('admin.permissions.columnCreated')}\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('admin.permissions.columnActions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200/60 dark:divide-white/10\">\n {filteredPermissions.map((permission) => (\n <tr key={permission.id} className=\"transition-colors hover:bg-white/40 dark:hover:bg-white/5\">\n <td className=\"px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {permission.name}\n </p>\n {permission.description && (\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">\n {permission.description}\n </p>\n )}\n </div>\n </td>\n <td className=\"hidden px-4 py-3 sm:table-cell\">\n {permission.resource ? (\n <Badge color=\"blue\">{permission.resource}</Badge>\n ) : (\n <span className=\"text-gray-400 dark:text-gray-500\">—</span>\n )}\n </td>\n <td className=\"hidden px-4 py-3 sm:table-cell\">\n {permission.action ? (\n <Badge color=\"amber\">{permission.action}</Badge>\n ) : (\n <span className=\"text-gray-400 dark:text-gray-500\">—</span>\n )}\n </td>\n <td className=\"hidden px-4 py-3 text-gray-500 dark:text-gray-400 md:table-cell\">\n {format.dateTime(new Date(permission.createdAt), {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })}\n </td>\n <td className=\"px-4 py-3 text-right\">\n <div className=\"flex items-center justify-end gap-1\">\n <Button\n size=\"sm\"\n outline\n onClick={() => handleOpenEdit(permission)}\n >\n <PencilSquareIcon className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleDeleteRequest(permission)}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </SectionCard>\n\n {/* Create/Edit permission sheet */}\n <Sheet\n open={isFormOpen}\n onClose={handleCloseForm}\n title={editingPermission\n ? t('admin.permissions.editSheetTitle')\n : t('admin.permissions.createSheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n {!editingPermission && (\n <Input\n label={t('admin.permissions.formIdLabel')}\n value={formId}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormId(event.target.value)}\n placeholder={t('admin.permissions.formIdPlaceholder')}\n disabled={isSubmitting}\n autoFocus\n />\n )}\n\n <Input\n label={t('admin.permissions.formNameLabel')}\n value={formName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormName(event.target.value)}\n placeholder={t('admin.permissions.formNamePlaceholder')}\n disabled={isSubmitting}\n autoFocus={!!editingPermission}\n />\n\n <Input\n label={t('admin.permissions.formDescriptionLabel')}\n value={formDescription}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormDescription(event.target.value)}\n placeholder={t('admin.permissions.formDescriptionPlaceholder')}\n disabled={isSubmitting}\n />\n\n <div className=\"grid grid-cols-2 gap-3\">\n <Input\n label={t('admin.permissions.formResourceLabel')}\n value={formResource}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormResource(event.target.value)}\n placeholder={t('admin.permissions.formResourcePlaceholder')}\n disabled={isSubmitting}\n />\n <Input\n label={t('admin.permissions.formActionLabel')}\n value={formAction}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setFormAction(event.target.value)}\n placeholder={t('admin.permissions.formActionPlaceholder')}\n disabled={isSubmitting}\n />\n </div>\n\n {formError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{formError}</p>\n )}\n\n <div className=\"flex gap-3\">\n <Button\n outline\n onClick={handleCloseForm}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n {t('admin.permissions.formCancelButton')}\n </Button>\n <Button\n color=\"ios-glass-blue\"\n onClick={handleSubmitForm}\n loading={isSubmitting}\n disabled={isSubmitting || !formName.trim() || (!editingPermission && !formId.trim())}\n className=\"flex-1\"\n >\n {editingPermission\n ? t('admin.permissions.formSaveButton')\n : t('admin.permissions.formCreateButton')}\n </Button>\n </div>\n </div>\n </Sheet>\n\n {/* Delete confirmation */}\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n title={t('admin.permissions.deleteConfirmTitle', { name: deleteTarget?.name ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.permissions.deleteConfirmButton')}\n cancelLabel={t('admin.permissions.deleteCancelButton')}\n />\n </>\n )\n}\n"]}
@@ -42,5 +42,5 @@ function createPlatformRbac(opts) {
42
42
  }
43
43
 
44
44
  exports.createPlatformRbac = createPlatformRbac;
45
- //# sourceMappingURL=chunk-HZ4LOVHM.js.map
46
- //# sourceMappingURL=chunk-HZ4LOVHM.js.map
45
+ //# sourceMappingURL=chunk-VY52Y5GC.js.map
46
+ //# sourceMappingURL=chunk-VY52Y5GC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/rbac.ts"],"names":[],"mappings":";;;AAiDA,SAAS,eAAA,CAAgB,SAAiB,MAAA,EAAyB;AACjE,EAAA,IAAI,OAAA,KAAY,KAAK,OAAO,IAAA;AAC5B,EAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,IAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,IAAA,IAAI,YAAA,CAAa,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACpC,IAAA,IAAI,aAAa,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,GAAG,OAAO,KAAA;AAAA,EACjD;AACA,EAAA,OAAO,YAAA,CAAa,WAAW,WAAA,CAAY,MAAA;AAC7C;AAEO,SAAS,mBAGd,IAAA,EAAuF;AACvF,EAAA,MAAM,mBAAmB,IAAA,CAAK,KAAA;AAC9B,EAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,iBAAA,IAAsB,EAAC;AACvD,EAAA,MAAM,wBAAwB,IAAA,CAAK,mBAAA;AAInC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAsB,IAAA,CAAK,WAAA,IAAgB,UAAA,CAAW,CAAC,CAAA;AAE7D,EAAA,SAAS,sBAAsB,KAAA,EAAuB;AACpD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAa,KAAA,IAAmB,gBAAA,EAAkB;AACrE,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,SAAS,GAAA,CAAI,MAAuB,UAAA,EAAkC;AACpE,IAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,IAAA,MAAM,UAAA,GAAc,IAAA,CAAK,WAAA,IAAe,EAAC;AAEzC,IAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,UAAU,CAAA,IAAK,EAAC;AAC7D,IAAA,OAAO,cAAA,CAAe,IAAA;AAAA,MAAK,CAAC,UAC1B,UAAA,CAAW,IAAA,CAAK,CAAC,SAAA,KAAc,eAAA,CAAgB,SAAA,EAAW,KAAK,CAAC;AAAA,KAClE;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-VY52Y5GC.js","sourcesContent":["import type { AuthUser } from '../_auth'\n\n/**\n * Generic role-based access factory shared across platform apps (astrlabe,\n * kori-erp, etc). Each app instantiates this with its own role + permission\n * unions and seed-claim mapping. The factory closes over the config and\n * exports `ROLE_DEFINITIONS`, `MODULE_PERMISSIONS`, `normalizePlatformRole`,\n * and `can()` — the same surface the per-app file used to expose.\n *\n * The factory deliberately does not hardcode any specific role enum here —\n * astrlabe, kori-erp, and future apps each pick their own union (admin,\n * manager, analyst, viewer, …) and pass the role definitions in.\n */\n\nexport type PlatformRoleDefinition<TRole extends string> = {\n id: TRole\n label: string\n description: string\n}\n\nexport type CreatePlatformRbacOptions<\n TRole extends string,\n TPermission extends string,\n> = {\n /** Definitions for every role the app supports (id/label/description). */\n roles: Record<TRole, PlatformRoleDefinition<TRole>>\n /**\n * Maps each app-level permission to one or more JWT permission claim\n * strings. `can()` returns true when ANY of the listed claims (using\n * wildcard matching) is present in the user's JWT permissions.\n */\n permissionClaimsMap: Record<TPermission, readonly string[]>\n /** Optional map from navigation/module IDs to required permissions. */\n modulePermissions?: Record<string, TPermission>\n /** Role to fall back to when an unknown role string comes in. */\n defaultRole?: TRole\n}\n\nexport type PlatformRbac<TRole extends string, TPermission extends string> = {\n ROLE_DEFINITIONS: Record<TRole, PlatformRoleDefinition<TRole>>\n MODULE_PERMISSIONS: Record<string, TPermission>\n normalizePlatformRole: (input: unknown) => TRole\n can: (user: AuthUser | null, permission: TPermission) => boolean\n}\n\n/**\n * Match a permission string against a pattern (supports wildcards).\n * Same logic as windsock's usePermissionChecker.\n */\nfunction matchPermission(pattern: string, target: string): boolean {\n if (pattern === '*') return true\n if (pattern === target) return true\n const patternParts = pattern.split(':')\n const targetParts = target.split(':')\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i] === '*') return true\n if (patternParts[i] !== targetParts[i]) return false\n }\n return patternParts.length === targetParts.length\n}\n\nexport function createPlatformRbac<\n TRole extends string,\n TPermission extends string,\n>(opts: CreatePlatformRbacOptions<TRole, TPermission>): PlatformRbac<TRole, TPermission> {\n const ROLE_DEFINITIONS = opts.roles\n const MODULE_PERMISSIONS = opts.modulePermissions ?? ({} as Record<string, TPermission>)\n const PERMISSION_CLAIMS_MAP = opts.permissionClaimsMap\n\n // Pick the fallback role: explicit `defaultRole` first, then the first\n // entry in the roles map. We assume there's at least one role.\n const knownRoles = Object.keys(ROLE_DEFINITIONS) as TRole[]\n const fallbackRole: TRole = opts.defaultRole ?? (knownRoles[0] as TRole)\n\n function normalizePlatformRole(input: unknown): TRole {\n if (typeof input === 'string' && (input as TRole) in ROLE_DEFINITIONS) {\n return input as TRole\n }\n return fallbackRole\n }\n\n function can(user: AuthUser | null, permission: TPermission): boolean {\n if (!user) return false\n const userClaims = (user.permissions ?? []) as string[]\n\n const requiredClaims = PERMISSION_CLAIMS_MAP[permission] ?? []\n return requiredClaims.some((claim) =>\n userClaims.some((userClaim) => matchPermission(userClaim, claim))\n )\n }\n\n return {\n ROLE_DEFINITIONS,\n MODULE_PERMISSIONS,\n normalizePlatformRole,\n can,\n }\n}\n"]}