@datatechsolutions/ui 3.8.0 → 3.9.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 (97) hide show
  1. package/dist/astrlabe/index.js +107 -107
  2. package/dist/astrlabe/index.mjs +3 -3
  3. package/dist/astrlabe/workflow-canvas.js +3 -3
  4. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  5. package/dist/{chunk-KKXI7CPF.mjs → chunk-2E7HYTS7.mjs} +3 -3
  6. package/dist/{chunk-KKXI7CPF.mjs.map → chunk-2E7HYTS7.mjs.map} +1 -1
  7. package/dist/{chunk-EWYAM4WJ.mjs → chunk-2ZY3IQ2I.mjs} +3 -3
  8. package/dist/{chunk-EWYAM4WJ.mjs.map → chunk-2ZY3IQ2I.mjs.map} +1 -1
  9. package/dist/{chunk-VPFVW7ZF.js → chunk-6E2YH67A.js} +35 -35
  10. package/dist/{chunk-VPFVW7ZF.js.map → chunk-6E2YH67A.js.map} +1 -1
  11. package/dist/{chunk-A4A3SQTV.mjs → chunk-6QJI5YOJ.mjs} +3 -3
  12. package/dist/{chunk-A4A3SQTV.mjs.map → chunk-6QJI5YOJ.mjs.map} +1 -1
  13. package/dist/{chunk-3X3IYDG6.js → chunk-7AM2SXEF.js} +68 -68
  14. package/dist/{chunk-3X3IYDG6.js.map → chunk-7AM2SXEF.js.map} +1 -1
  15. package/dist/{chunk-H37VDL7Y.js → chunk-A2RIX2RK.js} +4 -4
  16. package/dist/{chunk-H37VDL7Y.js.map → chunk-A2RIX2RK.js.map} +1 -1
  17. package/dist/{chunk-32DHEVOH.mjs → chunk-ARLYOLSO.mjs} +3 -3
  18. package/dist/{chunk-32DHEVOH.mjs.map → chunk-ARLYOLSO.mjs.map} +1 -1
  19. package/dist/{chunk-5YVOLHSW.mjs → chunk-AXBD6OAF.mjs} +4 -4
  20. package/dist/{chunk-5YVOLHSW.mjs.map → chunk-AXBD6OAF.mjs.map} +1 -1
  21. package/dist/{chunk-ZP37M2QK.mjs → chunk-BWUFLW5W.mjs} +6 -6
  22. package/dist/{chunk-ZP37M2QK.mjs.map → chunk-BWUFLW5W.mjs.map} +1 -1
  23. package/dist/{chunk-HBOORO52.js → chunk-CLTNCBSP.js} +4 -4
  24. package/dist/{chunk-HBOORO52.js.map → chunk-CLTNCBSP.js.map} +1 -1
  25. package/dist/{chunk-F35GFICG.js → chunk-CRBGZA6Y.js} +13 -13
  26. package/dist/{chunk-F35GFICG.js.map → chunk-CRBGZA6Y.js.map} +1 -1
  27. package/dist/{chunk-7JZFNKJD.js → chunk-DQIEVLA3.js} +35 -35
  28. package/dist/{chunk-7JZFNKJD.js.map → chunk-DQIEVLA3.js.map} +1 -1
  29. package/dist/{chunk-57E4TCB2.mjs → chunk-EAIE4QGD.mjs} +3 -3
  30. package/dist/{chunk-57E4TCB2.mjs.map → chunk-EAIE4QGD.mjs.map} +1 -1
  31. package/dist/{chunk-5W6LMDXV.mjs → chunk-GQWC4EKE.mjs} +4 -4
  32. package/dist/{chunk-5W6LMDXV.mjs.map → chunk-GQWC4EKE.mjs.map} +1 -1
  33. package/dist/{chunk-FKUIVS6I.js → chunk-IVKFXPLO.js} +28 -28
  34. package/dist/{chunk-FKUIVS6I.js.map → chunk-IVKFXPLO.js.map} +1 -1
  35. package/dist/{chunk-FNA66TT4.js → chunk-MT66VKLS.js} +163 -219
  36. package/dist/chunk-MT66VKLS.js.map +1 -0
  37. package/dist/{chunk-74BU2EBZ.mjs → chunk-OEZ7GAJY.mjs} +6 -6
  38. package/dist/{chunk-74BU2EBZ.mjs.map → chunk-OEZ7GAJY.mjs.map} +1 -1
  39. package/dist/{chunk-CZZOCKEA.mjs → chunk-OVQ4MKCV.mjs} +3 -3
  40. package/dist/{chunk-CZZOCKEA.mjs.map → chunk-OVQ4MKCV.mjs.map} +1 -1
  41. package/dist/{chunk-WDBVIU7W.mjs → chunk-PD3JLDA5.mjs} +3 -3
  42. package/dist/{chunk-WDBVIU7W.mjs.map → chunk-PD3JLDA5.mjs.map} +1 -1
  43. package/dist/{chunk-TJPPZU77.js → chunk-R6GEJBFC.js} +34 -34
  44. package/dist/{chunk-TJPPZU77.js.map → chunk-R6GEJBFC.js.map} +1 -1
  45. package/dist/{chunk-Q4QORAMH.js → chunk-RFUSH7WD.js} +10 -10
  46. package/dist/{chunk-Q4QORAMH.js.map → chunk-RFUSH7WD.js.map} +1 -1
  47. package/dist/{chunk-VS6PTRQ7.mjs → chunk-SJ6SUS7H.mjs} +3 -3
  48. package/dist/{chunk-VS6PTRQ7.mjs.map → chunk-SJ6SUS7H.mjs.map} +1 -1
  49. package/dist/{chunk-E57RZXOR.js → chunk-T4IYOKHR.js} +25 -25
  50. package/dist/{chunk-E57RZXOR.js.map → chunk-T4IYOKHR.js.map} +1 -1
  51. package/dist/{chunk-3H5CFLVK.js → chunk-U6VFS3RD.js} +135 -135
  52. package/dist/{chunk-3H5CFLVK.js.map → chunk-U6VFS3RD.js.map} +1 -1
  53. package/dist/{chunk-RCHTRG7R.js → chunk-UZIICTIY.js} +55 -55
  54. package/dist/{chunk-RCHTRG7R.js.map → chunk-UZIICTIY.js.map} +1 -1
  55. package/dist/{chunk-TCP45Q4B.js → chunk-WJENX6KB.js} +9 -9
  56. package/dist/{chunk-TCP45Q4B.js.map → chunk-WJENX6KB.js.map} +1 -1
  57. package/dist/{chunk-PYNXIDG3.mjs → chunk-WS3IJFPW.mjs} +3 -3
  58. package/dist/{chunk-PYNXIDG3.mjs.map → chunk-WS3IJFPW.mjs.map} +1 -1
  59. package/dist/{chunk-Q7HRCCFT.js → chunk-ZDXEGSCF.js} +45 -45
  60. package/dist/{chunk-Q7HRCCFT.js.map → chunk-ZDXEGSCF.js.map} +1 -1
  61. package/dist/{chunk-PCUINUIC.mjs → chunk-ZQEMKEEH.mjs} +3 -3
  62. package/dist/{chunk-PCUINUIC.mjs.map → chunk-ZQEMKEEH.mjs.map} +1 -1
  63. package/dist/{chunk-E6C7MFHJ.mjs → chunk-ZQRUAXGP.mjs} +164 -218
  64. package/dist/chunk-ZQRUAXGP.mjs.map +1 -0
  65. package/dist/index.d.mts +43 -42
  66. package/dist/index.d.ts +43 -42
  67. package/dist/index.js +662 -670
  68. package/dist/index.mjs +1 -1
  69. package/dist/platform/admin/index.js +9 -9
  70. package/dist/platform/admin/index.mjs +3 -3
  71. package/dist/platform/agents-workspace.js +6 -6
  72. package/dist/platform/agents-workspace.mjs +5 -5
  73. package/dist/platform/app-shell.js +3 -3
  74. package/dist/platform/app-shell.mjs +2 -2
  75. package/dist/platform/auth/index.js +21 -21
  76. package/dist/platform/auth/index.mjs +3 -3
  77. package/dist/platform/billing/index.js +3 -3
  78. package/dist/platform/billing/index.mjs +2 -2
  79. package/dist/platform/impersonation/index.js +3 -3
  80. package/dist/platform/impersonation/index.mjs +2 -2
  81. package/dist/platform/index.d.mts +1 -1
  82. package/dist/platform/index.d.ts +1 -1
  83. package/dist/platform/index.js +74 -74
  84. package/dist/platform/index.mjs +17 -17
  85. package/dist/platform/pages/index.d.mts +93 -4
  86. package/dist/platform/pages/index.d.ts +93 -4
  87. package/dist/platform/pages/index.js +1009 -575
  88. package/dist/platform/pages/index.js.map +1 -1
  89. package/dist/platform/pages/index.mjs +805 -372
  90. package/dist/platform/pages/index.mjs.map +1 -1
  91. package/dist/platform/settings/index.js +6 -6
  92. package/dist/platform/settings/index.mjs +5 -5
  93. package/dist/platform/workflow-canvas-shell.js +4 -4
  94. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  95. package/package.json +1 -1
  96. package/dist/chunk-E6C7MFHJ.mjs.map +0 -1
  97. package/dist/chunk-FNA66TT4.js.map +0 -1
@@ -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-VPFVW7ZF.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-6E2YH67A.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,5 +1,5 @@
1
1
  "use client";
2
- import { GlassModal, FormInput, FormGrid } from './chunk-E6C7MFHJ.mjs';
2
+ import { GlassModal, FormInput, FormGrid } from './chunk-ZQRUAXGP.mjs';
3
3
  import { Button } from './chunk-WR55H7DH.mjs';
4
4
  import { useState } from 'react';
5
5
  import { CircleStackIcon, ServerStackIcon, CloudIcon, ClockIcon, ShareIcon, KeyIcon, MagnifyingGlassIcon, ArrowLeftIcon, CheckCircleIcon, XCircleIcon } from '@heroicons/react/24/outline';
@@ -444,5 +444,5 @@ function splitList(raw) {
444
444
  }
445
445
 
446
446
  export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect };
447
- //# sourceMappingURL=chunk-A4A3SQTV.mjs.map
448
- //# sourceMappingURL=chunk-A4A3SQTV.mjs.map
447
+ //# sourceMappingURL=chunk-6QJI5YOJ.mjs.map
448
+ //# sourceMappingURL=chunk-6QJI5YOJ.mjs.map