@datatechsolutions/ui 3.11.2 → 3.12.1

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 (99) hide show
  1. package/dist/astrlabe/index.js +108 -108
  2. package/dist/astrlabe/index.mjs +4 -4
  3. package/dist/astrlabe/workflow-canvas.js +4 -4
  4. package/dist/astrlabe/workflow-canvas.mjs +3 -3
  5. package/dist/{chunk-TZA5T4MJ.mjs → chunk-4D23CQZM.mjs} +80 -16
  6. package/dist/chunk-4D23CQZM.mjs.map +1 -0
  7. package/dist/{chunk-5Y67PZWC.js → chunk-5OZTI7TR.js} +4 -4
  8. package/dist/{chunk-5Y67PZWC.js.map → chunk-5OZTI7TR.js.map} +1 -1
  9. package/dist/{chunk-5TJR3VJ6.mjs → chunk-5TLKFOEL.mjs} +4 -4
  10. package/dist/{chunk-5TJR3VJ6.mjs.map → chunk-5TLKFOEL.mjs.map} +1 -1
  11. package/dist/{chunk-N7T4X6A7.mjs → chunk-BPMYNE7S.mjs} +3 -3
  12. package/dist/{chunk-N7T4X6A7.mjs.map → chunk-BPMYNE7S.mjs.map} +1 -1
  13. package/dist/{chunk-JBXNEOFB.mjs → chunk-EDI46QA7.mjs} +3 -3
  14. package/dist/{chunk-JBXNEOFB.mjs.map → chunk-EDI46QA7.mjs.map} +1 -1
  15. package/dist/{chunk-3BFQ3SVG.js → chunk-FKRIQYRG.js} +68 -68
  16. package/dist/{chunk-3BFQ3SVG.js.map → chunk-FKRIQYRG.js.map} +1 -1
  17. package/dist/{chunk-HLIMHIRH.js → chunk-HTODLUKG.js} +9 -9
  18. package/dist/{chunk-HLIMHIRH.js.map → chunk-HTODLUKG.js.map} +1 -1
  19. package/dist/{chunk-BGLYJ7GR.js → chunk-ID55ABBB.js} +35 -35
  20. package/dist/{chunk-BGLYJ7GR.js.map → chunk-ID55ABBB.js.map} +1 -1
  21. package/dist/{chunk-MCHTZ63Q.js → chunk-LRNVB7MO.js} +4 -4
  22. package/dist/{chunk-MCHTZ63Q.js.map → chunk-LRNVB7MO.js.map} +1 -1
  23. package/dist/{chunk-Y4YIGEX6.js → chunk-MFF37C24.js} +135 -135
  24. package/dist/{chunk-Y4YIGEX6.js.map → chunk-MFF37C24.js.map} +1 -1
  25. package/dist/{chunk-TXI3QDYE.js → chunk-MYHBXIO2.js} +34 -34
  26. package/dist/{chunk-TXI3QDYE.js.map → chunk-MYHBXIO2.js.map} +1 -1
  27. package/dist/{chunk-OZEOBZOW.mjs → chunk-N5GQIT7A.mjs} +7 -7
  28. package/dist/{chunk-OZEOBZOW.mjs.map → chunk-N5GQIT7A.mjs.map} +1 -1
  29. package/dist/{chunk-AVLOGVVA.mjs → chunk-NK4H3JWN.mjs} +3 -3
  30. package/dist/{chunk-AVLOGVVA.mjs.map → chunk-NK4H3JWN.mjs.map} +1 -1
  31. package/dist/{chunk-RUWUH7DW.mjs → chunk-NQGLSM46.mjs} +3 -3
  32. package/dist/{chunk-RUWUH7DW.mjs.map → chunk-NQGLSM46.mjs.map} +1 -1
  33. package/dist/{chunk-KGC5CRS7.mjs → chunk-OM5NNUD2.mjs} +3 -3
  34. package/dist/{chunk-KGC5CRS7.mjs.map → chunk-OM5NNUD2.mjs.map} +1 -1
  35. package/dist/{chunk-D5FL3ZHC.mjs → chunk-OW5LSEHU.mjs} +86 -43
  36. package/dist/chunk-OW5LSEHU.mjs.map +1 -0
  37. package/dist/{chunk-WSXP645I.mjs → chunk-PIIY2Z2O.mjs} +3 -3
  38. package/dist/{chunk-WSXP645I.mjs.map → chunk-PIIY2Z2O.mjs.map} +1 -1
  39. package/dist/{chunk-5JS3UFBF.js → chunk-PLEWG2L7.js} +13 -13
  40. package/dist/{chunk-5JS3UFBF.js.map → chunk-PLEWG2L7.js.map} +1 -1
  41. package/dist/{chunk-5NKGJV72.js → chunk-QSCWV47U.js} +25 -25
  42. package/dist/{chunk-5NKGJV72.js.map → chunk-QSCWV47U.js.map} +1 -1
  43. package/dist/{chunk-4PUVECVF.mjs → chunk-RBH723MG.mjs} +3 -3
  44. package/dist/{chunk-4PUVECVF.mjs.map → chunk-RBH723MG.mjs.map} +1 -1
  45. package/dist/{chunk-NDGYIHJ3.mjs → chunk-RT264BD4.mjs} +3 -3
  46. package/dist/{chunk-NDGYIHJ3.mjs.map → chunk-RT264BD4.mjs.map} +1 -1
  47. package/dist/{chunk-3J4E2THD.js → chunk-TDNBO3V7.js} +45 -45
  48. package/dist/{chunk-3J4E2THD.js.map → chunk-TDNBO3V7.js.map} +1 -1
  49. package/dist/{chunk-6R5Z2IQ5.js → chunk-ULKZGM2T.js} +86 -43
  50. package/dist/chunk-ULKZGM2T.js.map +1 -0
  51. package/dist/{chunk-JXROBMRU.mjs → chunk-UVFWKDRO.mjs} +3 -3
  52. package/dist/{chunk-JXROBMRU.mjs.map → chunk-UVFWKDRO.mjs.map} +1 -1
  53. package/dist/{chunk-GDVB7QDZ.js → chunk-V3UZCOZI.js} +102 -38
  54. package/dist/chunk-V3UZCOZI.js.map +1 -0
  55. package/dist/{chunk-V32NUE5U.js → chunk-VYU2FYDE.js} +55 -55
  56. package/dist/{chunk-V32NUE5U.js.map → chunk-VYU2FYDE.js.map} +1 -1
  57. package/dist/{chunk-M64U336M.mjs → chunk-WLNY3GVM.mjs} +6 -6
  58. package/dist/{chunk-M64U336M.mjs.map → chunk-WLNY3GVM.mjs.map} +1 -1
  59. package/dist/{chunk-LW2LFJZ7.js → chunk-XGAPZT4J.js} +36 -36
  60. package/dist/{chunk-LW2LFJZ7.js.map → chunk-XGAPZT4J.js.map} +1 -1
  61. package/dist/{chunk-LBCUQ4FY.mjs → chunk-YYNGXKUE.mjs} +3 -3
  62. package/dist/{chunk-LBCUQ4FY.mjs.map → chunk-YYNGXKUE.mjs.map} +1 -1
  63. package/dist/{chunk-N5FWIT7N.js → chunk-Z75CEP4V.js} +10 -10
  64. package/dist/{chunk-N5FWIT7N.js.map → chunk-Z75CEP4V.js.map} +1 -1
  65. package/dist/index.d.mts +13 -4
  66. package/dist/index.d.ts +13 -4
  67. package/dist/index.js +663 -663
  68. package/dist/index.mjs +2 -2
  69. package/dist/platform/admin/index.js +10 -10
  70. package/dist/platform/admin/index.mjs +4 -4
  71. package/dist/platform/agents-workspace.js +7 -7
  72. package/dist/platform/agents-workspace.mjs +6 -6
  73. package/dist/platform/app-shell.js +4 -4
  74. package/dist/platform/app-shell.mjs +3 -3
  75. package/dist/platform/auth/index.js +22 -22
  76. package/dist/platform/auth/index.mjs +4 -4
  77. package/dist/platform/billing/index.js +4 -4
  78. package/dist/platform/billing/index.mjs +3 -3
  79. package/dist/platform/impersonation/index.js +4 -4
  80. package/dist/platform/impersonation/index.mjs +3 -3
  81. package/dist/platform/index.d.mts +1 -1
  82. package/dist/platform/index.d.ts +1 -1
  83. package/dist/platform/index.js +86 -86
  84. package/dist/platform/index.mjs +18 -18
  85. package/dist/platform/pages/index.d.mts +75 -16
  86. package/dist/platform/pages/index.d.ts +75 -16
  87. package/dist/platform/pages/index.js +1089 -505
  88. package/dist/platform/pages/index.js.map +1 -1
  89. package/dist/platform/pages/index.mjs +789 -205
  90. package/dist/platform/pages/index.mjs.map +1 -1
  91. package/dist/platform/settings/index.js +7 -7
  92. package/dist/platform/settings/index.mjs +6 -6
  93. package/dist/platform/workflow-canvas-shell.js +5 -5
  94. package/dist/platform/workflow-canvas-shell.mjs +4 -4
  95. package/package.json +1 -1
  96. package/dist/chunk-6R5Z2IQ5.js.map +0 -1
  97. package/dist/chunk-D5FL3ZHC.mjs.map +0 -1
  98. package/dist/chunk-GDVB7QDZ.js.map +0 -1
  99. package/dist/chunk-TZA5T4MJ.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { SectionCard, SegmentedControl, StatusBadge, InlineSpinner, EmptyState, ListCard, ListCardItem, Avatar, DynamicIslandConfirm, Sheet, Input } from './chunk-D5FL3ZHC.mjs';
2
+ import { SectionCard, SegmentedControl, StatusBadge, InlineSpinner, EmptyState, ListCard, ListCardItem, Avatar, DynamicIslandConfirm, Sheet, Input } from './chunk-OW5LSEHU.mjs';
3
3
  import { useTranslations, useFormatter } from './chunk-7VJ7CMMT.mjs';
4
4
  import { Badge, Button } from './chunk-WR55H7DH.mjs';
5
5
  import { triggerHaptic } from './chunk-D2JF6C3E.mjs';
@@ -500,5 +500,5 @@ function AdminOrganizationDetail({
500
500
  }
501
501
 
502
502
  export { AdminOrganizationDetail };
503
- //# sourceMappingURL=chunk-JXROBMRU.mjs.map
504
- //# sourceMappingURL=chunk-JXROBMRU.mjs.map
503
+ //# sourceMappingURL=chunk-UVFWKDRO.mjs.map
504
+ //# sourceMappingURL=chunk-UVFWKDRO.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/platform/admin/admin-organization-detail.tsx"],"names":[],"mappings":"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","file":"chunk-JXROBMRU.mjs","sourcesContent":["import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n SegmentedControl,\n ListCard,\n ListCardItem,\n Button,\n Input,\n Badge,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n Sheet,\n DynamicIslandConfirm,\n Avatar,\n triggerHaptic,\n} from '@ui/index'\nimport {\n UsersIcon,\n EnvelopeIcon,\n GlobeAltIcon,\n PlusIcon,\n TrashIcon,\n CheckCircleIcon,\n ArrowPathIcon,\n} from '@heroicons/react/24/outline'\nimport type {\n AuthOrganizationDomain,\n AuthOrganizationInvitation,\n} from '@datatechsolutions/shared-domain'\n\nexport type { AdminOrganizationDetailProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminOrganizationDetailProps,\n AdminOrganizationDetailTab,\n AdminOrganizationMember,\n AdminCreateInvitationInput,\n} from '@datatechsolutions/shared-domain'\nimport type { AuthOrganizationRole } from '@datatechsolutions/shared-domain'\n\nconst ALL_TABS: AdminOrganizationDetailTab[] = ['members', 'invitations', 'domains']\n\n// ── Members Tab ─────────────────────────────────────────────────────────────\n\nfunction MembersTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n\n const [members, setMembers] = useState<AdminOrganizationMember[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [removingId, setRemovingId] = useState<string | null>(null)\n const [removeTarget, setRemoveTarget] = useState<AdminOrganizationMember | null>(null)\n\n const fetchMembers = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationMembers(organizationId)\n setMembers(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchMembers()\n }, [fetchMembers])\n\n const handleRemoveRequest = useCallback((member: AdminOrganizationMember) => {\n triggerHaptic('warning')\n setRemoveTarget(member)\n }, [])\n\n const handleRemoveConfirm = useCallback(async () => {\n if (!removeTarget) return\n setRemovingId(removeTarget.id)\n triggerHaptic('medium')\n try {\n await client.removeOrganizationMember(organizationId, removeTarget.id)\n setRemoveTarget(null)\n triggerHaptic('success')\n fetchMembers()\n } catch {\n triggerHaptic('error')\n } finally {\n setRemovingId(null)\n }\n }, [removeTarget, client, organizationId, fetchMembers])\n\n const handleRemoveCancel = useCallback(() => {\n triggerHaptic('light')\n setRemoveTarget(null)\n }, [])\n\n const roleBadgeColor = (role: string) => {\n if (role === 'owner') return 'purple' as const\n if (role === 'admin') return 'blue' as const\n return 'zinc' as const\n }\n\n if (isLoading) {\n return (\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.organizationDetail.members.loading')}</span>\n </div>\n )\n }\n\n if (members.length === 0) {\n return (\n <EmptyState\n message={t('admin.organizationDetail.members.emptyMessage')}\n description={t('admin.organizationDetail.members.emptyDescription')}\n icon={UsersIcon}\n variant=\"card\"\n />\n )\n }\n\n return (\n <>\n <ListCard>\n {members.map((member) => (\n <ListCardItem\n key={member.id}\n leading={\n <Avatar\n src={(member as unknown as { image?: string }).image}\n initials={(member.name ?? member.email).slice(0, 2).toUpperCase()}\n alt={member.name ?? member.email}\n />\n }\n trailing={\n member.role !== 'owner' ? (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleRemoveRequest(member)}\n loading={removingId === member.id}\n disabled={removingId !== null}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n ) : undefined\n }\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-gray-900 dark:text-white\">\n {member.name ?? member.email}\n </p>\n <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">\n {member.email}\n </p>\n </div>\n <Badge color={roleBadgeColor(member.role)}>{member.role}</Badge>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n\n <DynamicIslandConfirm\n open={removeTarget !== null}\n onClose={handleRemoveCancel}\n onConfirm={handleRemoveConfirm}\n title={t('admin.organizationDetail.members.removeConfirmTitle', { name: removeTarget?.name ?? removeTarget?.email ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.organizationDetail.members.removeConfirmButton')}\n cancelLabel={t('admin.organizationDetail.members.removeCancelButton')}\n />\n </>\n )\n}\n\n// ── Invitations Tab ─────────────────────────────────────────────────────────\n\nfunction InvitationsTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [invitations, setInvitations] = useState<AuthOrganizationInvitation[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [isInviteSheetOpen, setIsInviteSheetOpen] = useState(false)\n const [inviteEmail, setInviteEmail] = useState('')\n const [inviteRole, setInviteRole] = useState<AuthOrganizationRole>('member')\n const [isInviting, setIsInviting] = useState(false)\n const [inviteError, setInviteError] = useState<string | null>(null)\n\n const fetchInvitations = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationInvitations(organizationId)\n setInvitations(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchInvitations()\n }, [fetchInvitations])\n\n const handleOpenInviteSheet = useCallback(() => {\n triggerHaptic('light')\n setInviteEmail('')\n setInviteRole('member')\n setInviteError(null)\n setIsInviteSheetOpen(true)\n }, [])\n\n const handleCloseInviteSheet = useCallback(() => {\n triggerHaptic('light')\n setIsInviteSheetOpen(false)\n }, [])\n\n const handleSendInvitation = useCallback(async () => {\n if (!inviteEmail.trim()) {\n setInviteError(t('admin.organizationDetail.invitations.errorEmailRequired'))\n triggerHaptic('error')\n return\n }\n\n setInviteError(null)\n setIsInviting(true)\n triggerHaptic('light')\n\n try {\n const data: AdminCreateInvitationInput = {\n email: inviteEmail.trim().toLowerCase(),\n role: inviteRole,\n }\n await client.createOrganizationInvitation(organizationId, data)\n triggerHaptic('success')\n setIsInviteSheetOpen(false)\n fetchInvitations()\n } catch {\n setInviteError(t('admin.organizationDetail.invitations.errorSendFailed'))\n triggerHaptic('error')\n } finally {\n setIsInviting(false)\n }\n }, [inviteEmail, inviteRole, client, organizationId, fetchInvitations, t])\n\n const statusBadgeColor = (status: string) => {\n if (status === 'accepted') return 'green' as const\n if (status === 'pending') return 'amber' as const\n if (status === 'revoked' || status === 'expired') return 'red' as const\n return 'zinc' as const\n }\n\n const roleOptions: AuthOrganizationRole[] = ['viewer', 'member', 'admin', 'owner']\n\n if (isLoading) {\n return (\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.organizationDetail.invitations.loading')}</span>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"space-y-4\">\n <Button\n color=\"ios-glass-blue\"\n onClick={handleOpenInviteSheet}\n fullWidth\n >\n <PlusIcon className=\"mr-1.5 h-4 w-4\" />\n {t('admin.organizationDetail.invitations.inviteButton')}\n </Button>\n\n {invitations.length === 0 ? (\n <EmptyState\n message={t('admin.organizationDetail.invitations.emptyMessage')}\n description={t('admin.organizationDetail.invitations.emptyDescription')}\n icon={EnvelopeIcon}\n variant=\"card\"\n />\n ) : (\n <ListCard>\n {invitations.map((invitation) => (\n <ListCardItem\n key={invitation.id}\n leading={\n <div className=\"flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 shadow-sm\">\n <EnvelopeIcon className=\"h-5 w-5 text-white\" />\n </div>\n }\n trailing={\n <Badge color={statusBadgeColor(invitation.status)}>{invitation.status}</Badge>\n }\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {invitation.email}\n </p>\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">\n {t('admin.organizationDetail.invitations.roleLabel', { role: invitation.role })}\n {' · '}\n {format.dateTime(new Date(invitation.createdAt), {\n month: 'short',\n day: 'numeric',\n })}\n </p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </div>\n\n {/* Invite sheet */}\n <Sheet\n open={isInviteSheetOpen}\n onClose={handleCloseInviteSheet}\n title={t('admin.organizationDetail.invitations.sheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <Input\n label={t('admin.organizationDetail.invitations.emailLabel')}\n type=\"email\"\n value={inviteEmail}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setInviteEmail(event.target.value)}\n placeholder={t('admin.organizationDetail.invitations.emailPlaceholder')}\n disabled={isInviting}\n autoFocus\n />\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-900 dark:text-white\">\n {t('admin.organizationDetail.invitations.roleSelectLabel')}\n </label>\n <div className=\"grid grid-cols-4 gap-2\">\n {roleOptions.map((role) => (\n <button\n key={role}\n type=\"button\"\n onClick={() => {\n setInviteRole(role)\n triggerHaptic('light')\n }}\n className={`rounded-xl border px-2 py-2 text-xs font-semibold backdrop-blur-xl transition ${\n inviteRole === 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 {inviteError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{inviteError}</p>\n )}\n\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleSendInvitation}\n loading={isInviting}\n disabled={isInviting || !inviteEmail.trim()}\n >\n {t('admin.organizationDetail.invitations.sendButton')}\n </Button>\n </div>\n </Sheet>\n </>\n )\n}\n\n// ── Domains Tab ─────────────────────────────────────────────────────────────\n\nfunction DomainsTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n\n const [domains, setDomains] = useState<AuthOrganizationDomain[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [isAddSheetOpen, setIsAddSheetOpen] = useState(false)\n const [newDomain, setNewDomain] = useState('')\n const [isAdding, setIsAdding] = useState(false)\n const [addError, setAddError] = useState<string | null>(null)\n const [verifyingDomain, setVerifyingDomain] = useState<string | null>(null)\n\n const fetchDomains = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationDomains(organizationId)\n setDomains(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchDomains()\n }, [fetchDomains])\n\n const handleOpenAddSheet = useCallback(() => {\n triggerHaptic('light')\n setNewDomain('')\n setAddError(null)\n setIsAddSheetOpen(true)\n }, [])\n\n const handleCloseAddSheet = useCallback(() => {\n triggerHaptic('light')\n setIsAddSheetOpen(false)\n }, [])\n\n const handleAddDomain = useCallback(async () => {\n if (!newDomain.trim()) {\n setAddError(t('admin.organizationDetail.domains.errorDomainRequired'))\n triggerHaptic('error')\n return\n }\n\n setAddError(null)\n setIsAdding(true)\n triggerHaptic('light')\n\n try {\n await client.addOrganizationDomain(organizationId, newDomain.trim().toLowerCase())\n triggerHaptic('success')\n setIsAddSheetOpen(false)\n fetchDomains()\n } catch {\n setAddError(t('admin.organizationDetail.domains.errorAddFailed'))\n triggerHaptic('error')\n } finally {\n setIsAdding(false)\n }\n }, [newDomain, client, organizationId, fetchDomains, t])\n\n const handleVerifyDomain = useCallback(async (domain: string) => {\n setVerifyingDomain(domain)\n triggerHaptic('light')\n try {\n await client.verifyOrganizationDomain(organizationId, domain)\n triggerHaptic('success')\n fetchDomains()\n } catch {\n triggerHaptic('error')\n } finally {\n setVerifyingDomain(null)\n }\n }, [client, organizationId, fetchDomains])\n\n if (isLoading) {\n return (\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.organizationDetail.domains.loading')}</span>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"space-y-4\">\n <Button\n color=\"ios-glass-blue\"\n onClick={handleOpenAddSheet}\n fullWidth\n >\n <PlusIcon className=\"mr-1.5 h-4 w-4\" />\n {t('admin.organizationDetail.domains.addButton')}\n </Button>\n\n {domains.length === 0 ? (\n <EmptyState\n message={t('admin.organizationDetail.domains.emptyMessage')}\n description={t('admin.organizationDetail.domains.emptyDescription')}\n icon={GlobeAltIcon}\n variant=\"card\"\n />\n ) : (\n <ListCard>\n {domains.map((domain) => (\n <ListCardItem\n key={domain.id}\n leading={\n <div className={`flex h-9 w-9 items-center justify-center rounded-xl shadow-sm ${\n domain.verified\n ? 'bg-gradient-to-br from-emerald-500 to-green-600'\n : 'bg-gradient-to-br from-amber-500 to-orange-600'\n }`}>\n {domain.verified\n ? <CheckCircleIcon className=\"h-5 w-5 text-white\" />\n : <GlobeAltIcon className=\"h-5 w-5 text-white\" />\n }\n </div>\n }\n trailing={\n !domain.verified ? (\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={() => handleVerifyDomain(domain.domain)}\n loading={verifyingDomain === domain.domain}\n disabled={verifyingDomain !== null}\n >\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {t('admin.organizationDetail.domains.verifyButton')}\n </Button>\n ) : (\n <StatusBadge status=\"active\" label={t('admin.organizationDetail.domains.verifiedLabel')} size=\"sm\" />\n )\n }\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {domain.domain}\n </p>\n {domain.autoJoinEnabled && (\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">\n {t('admin.organizationDetail.domains.autoJoinEnabled')}\n </p>\n )}\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </div>\n\n {/* Add domain sheet */}\n <Sheet\n open={isAddSheetOpen}\n onClose={handleCloseAddSheet}\n title={t('admin.organizationDetail.domains.sheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <Input\n label={t('admin.organizationDetail.domains.domainLabel')}\n value={newDomain}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setNewDomain(event.target.value)}\n placeholder={t('admin.organizationDetail.domains.domainPlaceholder')}\n disabled={isAdding}\n autoFocus\n />\n\n {addError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{addError}</p>\n )}\n\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleAddDomain}\n loading={isAdding}\n disabled={isAdding || !newDomain.trim()}\n >\n {t('admin.organizationDetail.domains.addDomainButton')}\n </Button>\n </div>\n </Sheet>\n </>\n )\n}\n\n// ── AdminOrganizationDetail ─────────────────────────────────────────────────\n\nexport function AdminOrganizationDetail({\n organization,\n client,\n}: AdminOrganizationDetailProps) {\n const t = useTranslations('windsock')\n\n const [activeTab, setActiveTab] = useState<AdminOrganizationDetailTab>('members')\n\n const segments = ALL_TABS.map((tab) => ({\n value: tab,\n label: t(`admin.organizationDetail.tabs.${tab}`),\n }))\n\n return (\n <div className=\"space-y-6\">\n {/* Organization header */}\n <SectionCard\n header={{\n icon: <UsersIcon className=\"h-5 w-5 text-white\" />,\n title: organization.displayName ?? organization.name,\n subtitle: organization.description ?? t('admin.organizationDetail.defaultSubtitle'),\n gradient: 'from-emerald-500 via-teal-500 to-cyan-500',\n rightContent: (\n <StatusBadge\n status={organization.enabled ? 'active' : 'inactive'}\n label={organization.enabled\n ? t('admin.organizationDetail.statusEnabled')\n : t('admin.organizationDetail.statusDisabled')}\n size=\"sm\"\n />\n ),\n }}\n >\n <div className=\"space-y-4\">\n <SegmentedControl\n segments={segments}\n value={activeTab}\n onChange={(value: string) => setActiveTab(value as AdminOrganizationDetailTab)}\n fullWidth\n />\n\n {activeTab === 'members' && (\n <MembersTabContent organizationId={organization.id} client={client} />\n )}\n\n {activeTab === 'invitations' && (\n <InvitationsTabContent organizationId={organization.id} client={client} />\n )}\n\n {activeTab === 'domains' && (\n <DomainsTabContent organizationId={organization.id} client={client} />\n )}\n </div>\n </SectionCard>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/platform/admin/admin-organization-detail.tsx"],"names":[],"mappings":"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","file":"chunk-UVFWKDRO.mjs","sourcesContent":["import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n SegmentedControl,\n ListCard,\n ListCardItem,\n Button,\n Input,\n Badge,\n StatusBadge,\n EmptyState,\n InlineSpinner,\n Sheet,\n DynamicIslandConfirm,\n Avatar,\n triggerHaptic,\n} from '@ui/index'\nimport {\n UsersIcon,\n EnvelopeIcon,\n GlobeAltIcon,\n PlusIcon,\n TrashIcon,\n CheckCircleIcon,\n ArrowPathIcon,\n} from '@heroicons/react/24/outline'\nimport type {\n AuthOrganizationDomain,\n AuthOrganizationInvitation,\n} from '@datatechsolutions/shared-domain'\n\nexport type { AdminOrganizationDetailProps } from '@datatechsolutions/shared-domain'\nimport type {\n AdminOrganizationDetailProps,\n AdminOrganizationDetailTab,\n AdminOrganizationMember,\n AdminCreateInvitationInput,\n} from '@datatechsolutions/shared-domain'\nimport type { AuthOrganizationRole } from '@datatechsolutions/shared-domain'\n\nconst ALL_TABS: AdminOrganizationDetailTab[] = ['members', 'invitations', 'domains']\n\n// ── Members Tab ─────────────────────────────────────────────────────────────\n\nfunction MembersTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n\n const [members, setMembers] = useState<AdminOrganizationMember[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [removingId, setRemovingId] = useState<string | null>(null)\n const [removeTarget, setRemoveTarget] = useState<AdminOrganizationMember | null>(null)\n\n const fetchMembers = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationMembers(organizationId)\n setMembers(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchMembers()\n }, [fetchMembers])\n\n const handleRemoveRequest = useCallback((member: AdminOrganizationMember) => {\n triggerHaptic('warning')\n setRemoveTarget(member)\n }, [])\n\n const handleRemoveConfirm = useCallback(async () => {\n if (!removeTarget) return\n setRemovingId(removeTarget.id)\n triggerHaptic('medium')\n try {\n await client.removeOrganizationMember(organizationId, removeTarget.id)\n setRemoveTarget(null)\n triggerHaptic('success')\n fetchMembers()\n } catch {\n triggerHaptic('error')\n } finally {\n setRemovingId(null)\n }\n }, [removeTarget, client, organizationId, fetchMembers])\n\n const handleRemoveCancel = useCallback(() => {\n triggerHaptic('light')\n setRemoveTarget(null)\n }, [])\n\n const roleBadgeColor = (role: string) => {\n if (role === 'owner') return 'purple' as const\n if (role === 'admin') return 'blue' as const\n return 'zinc' as const\n }\n\n if (isLoading) {\n return (\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.organizationDetail.members.loading')}</span>\n </div>\n )\n }\n\n if (members.length === 0) {\n return (\n <EmptyState\n message={t('admin.organizationDetail.members.emptyMessage')}\n description={t('admin.organizationDetail.members.emptyDescription')}\n icon={UsersIcon}\n variant=\"card\"\n />\n )\n }\n\n return (\n <>\n <ListCard>\n {members.map((member) => (\n <ListCardItem\n key={member.id}\n leading={\n <Avatar\n src={(member as unknown as { image?: string }).image}\n initials={(member.name ?? member.email).slice(0, 2).toUpperCase()}\n alt={member.name ?? member.email}\n />\n }\n trailing={\n member.role !== 'owner' ? (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={() => handleRemoveRequest(member)}\n loading={removingId === member.id}\n disabled={removingId !== null}\n >\n <TrashIcon className=\"h-3.5 w-3.5\" />\n </Button>\n ) : undefined\n }\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-gray-900 dark:text-white\">\n {member.name ?? member.email}\n </p>\n <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">\n {member.email}\n </p>\n </div>\n <Badge color={roleBadgeColor(member.role)}>{member.role}</Badge>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n\n <DynamicIslandConfirm\n open={removeTarget !== null}\n onClose={handleRemoveCancel}\n onConfirm={handleRemoveConfirm}\n title={t('admin.organizationDetail.members.removeConfirmTitle', { name: removeTarget?.name ?? removeTarget?.email ?? '' })}\n icon={<TrashIcon className=\"h-5 w-5 text-white\" />}\n iconBackground=\"bg-ios-red\"\n confirmLabel={t('admin.organizationDetail.members.removeConfirmButton')}\n cancelLabel={t('admin.organizationDetail.members.removeCancelButton')}\n />\n </>\n )\n}\n\n// ── Invitations Tab ─────────────────────────────────────────────────────────\n\nfunction InvitationsTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n\n const [invitations, setInvitations] = useState<AuthOrganizationInvitation[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [isInviteSheetOpen, setIsInviteSheetOpen] = useState(false)\n const [inviteEmail, setInviteEmail] = useState('')\n const [inviteRole, setInviteRole] = useState<AuthOrganizationRole>('member')\n const [isInviting, setIsInviting] = useState(false)\n const [inviteError, setInviteError] = useState<string | null>(null)\n\n const fetchInvitations = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationInvitations(organizationId)\n setInvitations(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchInvitations()\n }, [fetchInvitations])\n\n const handleOpenInviteSheet = useCallback(() => {\n triggerHaptic('light')\n setInviteEmail('')\n setInviteRole('member')\n setInviteError(null)\n setIsInviteSheetOpen(true)\n }, [])\n\n const handleCloseInviteSheet = useCallback(() => {\n triggerHaptic('light')\n setIsInviteSheetOpen(false)\n }, [])\n\n const handleSendInvitation = useCallback(async () => {\n if (!inviteEmail.trim()) {\n setInviteError(t('admin.organizationDetail.invitations.errorEmailRequired'))\n triggerHaptic('error')\n return\n }\n\n setInviteError(null)\n setIsInviting(true)\n triggerHaptic('light')\n\n try {\n const data: AdminCreateInvitationInput = {\n email: inviteEmail.trim().toLowerCase(),\n role: inviteRole,\n }\n await client.createOrganizationInvitation(organizationId, data)\n triggerHaptic('success')\n setIsInviteSheetOpen(false)\n fetchInvitations()\n } catch {\n setInviteError(t('admin.organizationDetail.invitations.errorSendFailed'))\n triggerHaptic('error')\n } finally {\n setIsInviting(false)\n }\n }, [inviteEmail, inviteRole, client, organizationId, fetchInvitations, t])\n\n const statusBadgeColor = (status: string) => {\n if (status === 'accepted') return 'green' as const\n if (status === 'pending') return 'amber' as const\n if (status === 'revoked' || status === 'expired') return 'red' as const\n return 'zinc' as const\n }\n\n const roleOptions: AuthOrganizationRole[] = ['viewer', 'member', 'admin', 'owner']\n\n if (isLoading) {\n return (\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.organizationDetail.invitations.loading')}</span>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"space-y-4\">\n <Button\n color=\"ios-glass-blue\"\n onClick={handleOpenInviteSheet}\n fullWidth\n >\n <PlusIcon className=\"mr-1.5 h-4 w-4\" />\n {t('admin.organizationDetail.invitations.inviteButton')}\n </Button>\n\n {invitations.length === 0 ? (\n <EmptyState\n message={t('admin.organizationDetail.invitations.emptyMessage')}\n description={t('admin.organizationDetail.invitations.emptyDescription')}\n icon={EnvelopeIcon}\n variant=\"card\"\n />\n ) : (\n <ListCard>\n {invitations.map((invitation) => (\n <ListCardItem\n key={invitation.id}\n leading={\n <div className=\"flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 shadow-sm\">\n <EnvelopeIcon className=\"h-5 w-5 text-white\" />\n </div>\n }\n trailing={\n <Badge color={statusBadgeColor(invitation.status)}>{invitation.status}</Badge>\n }\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {invitation.email}\n </p>\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">\n {t('admin.organizationDetail.invitations.roleLabel', { role: invitation.role })}\n {' · '}\n {format.dateTime(new Date(invitation.createdAt), {\n month: 'short',\n day: 'numeric',\n })}\n </p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </div>\n\n {/* Invite sheet */}\n <Sheet\n open={isInviteSheetOpen}\n onClose={handleCloseInviteSheet}\n title={t('admin.organizationDetail.invitations.sheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <Input\n label={t('admin.organizationDetail.invitations.emailLabel')}\n type=\"email\"\n value={inviteEmail}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setInviteEmail(event.target.value)}\n placeholder={t('admin.organizationDetail.invitations.emailPlaceholder')}\n disabled={isInviting}\n autoFocus\n />\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-gray-900 dark:text-white\">\n {t('admin.organizationDetail.invitations.roleSelectLabel')}\n </label>\n <div className=\"grid grid-cols-4 gap-2\">\n {roleOptions.map((role) => (\n <button\n key={role}\n type=\"button\"\n onClick={() => {\n setInviteRole(role)\n triggerHaptic('light')\n }}\n className={`rounded-xl border px-2 py-2 text-xs font-semibold backdrop-blur-xl transition ${\n inviteRole === 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 {inviteError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{inviteError}</p>\n )}\n\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleSendInvitation}\n loading={isInviting}\n disabled={isInviting || !inviteEmail.trim()}\n >\n {t('admin.organizationDetail.invitations.sendButton')}\n </Button>\n </div>\n </Sheet>\n </>\n )\n}\n\n// ── Domains Tab ─────────────────────────────────────────────────────────────\n\nfunction DomainsTabContent({\n organizationId,\n client,\n}: {\n organizationId: string\n client: AdminOrganizationDetailProps['client']\n}) {\n const t = useTranslations('windsock')\n\n const [domains, setDomains] = useState<AuthOrganizationDomain[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [isAddSheetOpen, setIsAddSheetOpen] = useState(false)\n const [newDomain, setNewDomain] = useState('')\n const [isAdding, setIsAdding] = useState(false)\n const [addError, setAddError] = useState<string | null>(null)\n const [verifyingDomain, setVerifyingDomain] = useState<string | null>(null)\n\n const fetchDomains = useCallback(async () => {\n setIsLoading(true)\n try {\n const result = await client.listOrganizationDomains(organizationId)\n setDomains(result)\n } catch {\n // Fail gracefully\n } finally {\n setIsLoading(false)\n }\n }, [client, organizationId])\n\n useEffect(() => {\n fetchDomains()\n }, [fetchDomains])\n\n const handleOpenAddSheet = useCallback(() => {\n triggerHaptic('light')\n setNewDomain('')\n setAddError(null)\n setIsAddSheetOpen(true)\n }, [])\n\n const handleCloseAddSheet = useCallback(() => {\n triggerHaptic('light')\n setIsAddSheetOpen(false)\n }, [])\n\n const handleAddDomain = useCallback(async () => {\n if (!newDomain.trim()) {\n setAddError(t('admin.organizationDetail.domains.errorDomainRequired'))\n triggerHaptic('error')\n return\n }\n\n setAddError(null)\n setIsAdding(true)\n triggerHaptic('light')\n\n try {\n await client.addOrganizationDomain(organizationId, newDomain.trim().toLowerCase())\n triggerHaptic('success')\n setIsAddSheetOpen(false)\n fetchDomains()\n } catch {\n setAddError(t('admin.organizationDetail.domains.errorAddFailed'))\n triggerHaptic('error')\n } finally {\n setIsAdding(false)\n }\n }, [newDomain, client, organizationId, fetchDomains, t])\n\n const handleVerifyDomain = useCallback(async (domain: string) => {\n setVerifyingDomain(domain)\n triggerHaptic('light')\n try {\n await client.verifyOrganizationDomain(organizationId, domain)\n triggerHaptic('success')\n fetchDomains()\n } catch {\n triggerHaptic('error')\n } finally {\n setVerifyingDomain(null)\n }\n }, [client, organizationId, fetchDomains])\n\n if (isLoading) {\n return (\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.organizationDetail.domains.loading')}</span>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"space-y-4\">\n <Button\n color=\"ios-glass-blue\"\n onClick={handleOpenAddSheet}\n fullWidth\n >\n <PlusIcon className=\"mr-1.5 h-4 w-4\" />\n {t('admin.organizationDetail.domains.addButton')}\n </Button>\n\n {domains.length === 0 ? (\n <EmptyState\n message={t('admin.organizationDetail.domains.emptyMessage')}\n description={t('admin.organizationDetail.domains.emptyDescription')}\n icon={GlobeAltIcon}\n variant=\"card\"\n />\n ) : (\n <ListCard>\n {domains.map((domain) => (\n <ListCardItem\n key={domain.id}\n leading={\n <div className={`flex h-9 w-9 items-center justify-center rounded-xl shadow-sm ${\n domain.verified\n ? 'bg-gradient-to-br from-emerald-500 to-green-600'\n : 'bg-gradient-to-br from-amber-500 to-orange-600'\n }`}>\n {domain.verified\n ? <CheckCircleIcon className=\"h-5 w-5 text-white\" />\n : <GlobeAltIcon className=\"h-5 w-5 text-white\" />\n }\n </div>\n }\n trailing={\n !domain.verified ? (\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={() => handleVerifyDomain(domain.domain)}\n loading={verifyingDomain === domain.domain}\n disabled={verifyingDomain !== null}\n >\n <ArrowPathIcon className=\"mr-1 h-3.5 w-3.5\" />\n {t('admin.organizationDetail.domains.verifyButton')}\n </Button>\n ) : (\n <StatusBadge status=\"active\" label={t('admin.organizationDetail.domains.verifiedLabel')} size=\"sm\" />\n )\n }\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {domain.domain}\n </p>\n {domain.autoJoinEnabled && (\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">\n {t('admin.organizationDetail.domains.autoJoinEnabled')}\n </p>\n )}\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n )}\n </div>\n\n {/* Add domain sheet */}\n <Sheet\n open={isAddSheetOpen}\n onClose={handleCloseAddSheet}\n title={t('admin.organizationDetail.domains.sheetTitle')}\n side=\"bottom\"\n size=\"md\"\n >\n <div className=\"space-y-4 p-4 sm:p-6\">\n <Input\n label={t('admin.organizationDetail.domains.domainLabel')}\n value={newDomain}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setNewDomain(event.target.value)}\n placeholder={t('admin.organizationDetail.domains.domainPlaceholder')}\n disabled={isAdding}\n autoFocus\n />\n\n {addError && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{addError}</p>\n )}\n\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleAddDomain}\n loading={isAdding}\n disabled={isAdding || !newDomain.trim()}\n >\n {t('admin.organizationDetail.domains.addDomainButton')}\n </Button>\n </div>\n </Sheet>\n </>\n )\n}\n\n// ── AdminOrganizationDetail ─────────────────────────────────────────────────\n\nexport function AdminOrganizationDetail({\n organization,\n client,\n}: AdminOrganizationDetailProps) {\n const t = useTranslations('windsock')\n\n const [activeTab, setActiveTab] = useState<AdminOrganizationDetailTab>('members')\n\n const segments = ALL_TABS.map((tab) => ({\n value: tab,\n label: t(`admin.organizationDetail.tabs.${tab}`),\n }))\n\n return (\n <div className=\"space-y-6\">\n {/* Organization header */}\n <SectionCard\n header={{\n icon: <UsersIcon className=\"h-5 w-5 text-white\" />,\n title: organization.displayName ?? organization.name,\n subtitle: organization.description ?? t('admin.organizationDetail.defaultSubtitle'),\n gradient: 'from-emerald-500 via-teal-500 to-cyan-500',\n rightContent: (\n <StatusBadge\n status={organization.enabled ? 'active' : 'inactive'}\n label={organization.enabled\n ? t('admin.organizationDetail.statusEnabled')\n : t('admin.organizationDetail.statusDisabled')}\n size=\"sm\"\n />\n ),\n }}\n >\n <div className=\"space-y-4\">\n <SegmentedControl\n segments={segments}\n value={activeTab}\n onChange={(value: string) => setActiveTab(value as AdminOrganizationDetailTab)}\n fullWidth\n />\n\n {activeTab === 'members' && (\n <MembersTabContent organizationId={organization.id} client={client} />\n )}\n\n {activeTab === 'invitations' && (\n <InvitationsTabContent organizationId={organization.id} client={client} />\n )}\n\n {activeTab === 'domains' && (\n <DomainsTabContent organizationId={organization.id} client={client} />\n )}\n </div>\n </SectionCard>\n </div>\n )\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk3BFQ3SVG_js = require('./chunk-3BFQ3SVG.js');
5
- var chunk6R5Z2IQ5_js = require('./chunk-6R5Z2IQ5.js');
4
+ var chunkFKRIQYRG_js = require('./chunk-FKRIQYRG.js');
5
+ var chunkULKZGM2T_js = require('./chunk-ULKZGM2T.js');
6
6
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
7
7
  var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
8
8
  var react = require('react');
@@ -18,16 +18,56 @@ var ROLE_OPTIONS = [
18
18
  function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
19
19
  const [createOpen, setCreateOpen] = react.useState(false);
20
20
  const [searchTerm, setSearchTerm] = react.useState("");
21
- const allUsers = users;
22
- const term = searchTerm.trim().toLowerCase();
23
- const filteredUsers = term ? allUsers.filter(
24
- (user) => user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term)
25
- ) : allUsers;
26
- const isEmpty = allUsers.length === 0;
21
+ const [filtersOpen, setFiltersOpen] = react.useState(false);
22
+ const [selectedRoles, setSelectedRoles] = react.useState([]);
23
+ const [activeFilter, setActiveFilter] = react.useState("all");
27
24
  const labelsAny = labels;
25
+ const isEmpty = users.length === 0;
26
+ const filteredUsers = react.useMemo(() => {
27
+ const term = searchTerm.trim().toLowerCase();
28
+ return users.filter((user) => {
29
+ if (term && !user.name.toLowerCase().includes(term) && !user.email.toLowerCase().includes(term)) return false;
30
+ if (selectedRoles.length > 0 && !selectedRoles.includes(user.role)) return false;
31
+ if (activeFilter === "active" && !user.active) return false;
32
+ if (activeFilter === "inactive" && user.active) return false;
33
+ return true;
34
+ });
35
+ }, [users, searchTerm, selectedRoles, activeFilter]);
36
+ const roleChipItems = react.useMemo(
37
+ () => ROLE_OPTIONS.map((opt) => ({
38
+ id: opt.value,
39
+ name: opt.label,
40
+ style: { bg: "bg-violet-500/15 text-violet-700 dark:text-violet-300", text: "" }
41
+ })),
42
+ []
43
+ );
44
+ const activeLabelFor = (value) => {
45
+ if (value === "active") return labelsAny.statusActive ?? labels.statusActive;
46
+ if (value === "inactive") return labelsAny.statusInactive ?? labels.statusInactive;
47
+ return labelsAny.statusAll ?? "Todos";
48
+ };
49
+ const activeFilters = react.useMemo(() => {
50
+ const chips = [];
51
+ for (const value of selectedRoles) {
52
+ chips.push({ type: "role", value, label: roleChipItems.find((i) => i.id === value)?.name ?? value });
53
+ }
54
+ if (activeFilter !== "all") {
55
+ chips.push({ type: "active", value: activeFilter, label: activeLabelFor(activeFilter) });
56
+ }
57
+ return chips;
58
+ }, [selectedRoles, activeFilter, roleChipItems]);
59
+ const filterCount = activeFilters.length;
60
+ const removeFilter = (filter) => {
61
+ if (filter.type === "role") setSelectedRoles((prev) => prev.filter((v) => v !== filter.value));
62
+ if (filter.type === "active") setActiveFilter("all");
63
+ };
64
+ const clearAllFilters = () => {
65
+ setSelectedRoles([]);
66
+ setActiveFilter("all");
67
+ };
28
68
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
29
69
  /* @__PURE__ */ jsxRuntime.jsx(
30
- chunk6R5Z2IQ5_js.HeroSection,
70
+ chunkULKZGM2T_js.HeroSection,
31
71
  {
32
72
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UserGroupIcon, { className: "h-5 w-5" }),
33
73
  label: labels.title,
@@ -35,16 +75,41 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
35
75
  subtitle: labels.subtitle,
36
76
  gradient: "from-violet-500 to-indigo-600",
37
77
  toolbar: !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
38
- chunk6R5Z2IQ5_js.SearchBar,
78
+ chunkULKZGM2T_js.SearchBar,
39
79
  {
40
80
  searchTerm,
41
81
  onSearchChange: setSearchTerm,
42
82
  placeholder: labelsAny.searchPlaceholder ?? labels.title,
43
- noBorder: true
83
+ noBorder: true,
84
+ activeFilters,
85
+ onRemoveFilter: removeFilter,
86
+ onClearAll: filterCount > 0 ? clearAllFilters : void 0,
87
+ filtersModal: {
88
+ open: filtersOpen,
89
+ onOpen: () => setFiltersOpen(true),
90
+ onClose: () => setFiltersOpen(false),
91
+ title: labelsAny.filtersTitle ?? "Filtros",
92
+ count: filterCount,
93
+ onClear: filterCount > 0 ? clearAllFilters : void 0,
94
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
95
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormSection, { title: labelsAny.filterByRole ?? labels.role, children: /* @__PURE__ */ jsxRuntime.jsx(
96
+ chunkULKZGM2T_js.ChipPicker,
97
+ {
98
+ items: roleChipItems,
99
+ selectedIds: selectedRoles,
100
+ onChange: setSelectedRoles,
101
+ selectedLabel: labelsAny.selected ?? "selecionados",
102
+ selectAllLabel: labelsAny.selectAll ?? "Selecionar todos",
103
+ clearLabel: labelsAny.clear ?? "Limpar"
104
+ }
105
+ ) }),
106
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormSection, { title: labelsAny.filterByStatus ?? labels.status, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: ["all", "active", "inactive"].map((value) => activeFilter === value ? /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Button, { type: "button", size: "sm", color: "ios-glass-blue", onClick: () => setActiveFilter(value), children: activeLabelFor(value) }, value) : /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Button, { type: "button", size: "sm", outline: true, onClick: () => setActiveFilter(value), children: activeLabelFor(value) }, value)) }) })
107
+ ] })
108
+ }
44
109
  }
45
110
  ) : void 0,
46
111
  actions: /* @__PURE__ */ jsxRuntime.jsx(
47
- chunk6R5Z2IQ5_js.CreateActionButton,
112
+ chunkULKZGM2T_js.CreateActionButton,
48
113
  {
49
114
  mode: "desktop",
50
115
  label: labels.create,
@@ -55,7 +120,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
55
120
  }
56
121
  ),
57
122
  /* @__PURE__ */ jsxRuntime.jsx(
58
- chunk6R5Z2IQ5_js.CreateActionButton,
123
+ chunkULKZGM2T_js.CreateActionButton,
59
124
  {
60
125
  mode: "mobile",
61
126
  label: labels.create,
@@ -66,18 +131,17 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
66
131
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
67
132
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.list }),
68
133
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredUsers.map((user) => /* @__PURE__ */ jsxRuntime.jsx(
69
- chunk6R5Z2IQ5_js.EntityCard,
134
+ chunkULKZGM2T_js.EntityCard,
70
135
  {
71
136
  accentGradient: "from-violet-500 to-indigo-700",
72
137
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.UserGroupIcon, { className: "h-6 w-6" }) }),
73
138
  title: user.name,
74
139
  subtitle: user.email,
75
140
  status: /* @__PURE__ */ jsxRuntime.jsx(
76
- chunk6R5Z2IQ5_js.StatusBadge,
141
+ "span",
77
142
  {
78
- status: user.active ? "active" : "inactive",
79
- label: user.active ? labels.statusActive : labels.statusInactive,
80
- size: "sm"
143
+ className: `shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${user.active ? "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300" : "bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300"}`,
144
+ children: user.active ? labels.statusActive : labels.statusInactive
81
145
  }
82
146
  ),
83
147
  footer: /* @__PURE__ */ jsxRuntime.jsx(
@@ -89,8 +153,8 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
89
153
  const role = String(formData.get("role") ?? "viewer");
90
154
  onUpdateRole({ email: user.email, role });
91
155
  },
92
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunk6R5Z2IQ5_js.InlineForm, { children: [
93
- /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormSelect, { name: "role", options: ROLE_OPTIONS, defaultValue: user.role }),
156
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkULKZGM2T_js.InlineForm, { children: [
157
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormSelect, { name: "role", options: ROLE_OPTIONS, defaultValue: user.role }),
94
158
  /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Button, { type: "submit", outline: true, size: "sm", children: labels.save })
95
159
  ] })
96
160
  }
@@ -100,7 +164,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
100
164
  )) })
101
165
  ] }),
102
166
  /* @__PURE__ */ jsxRuntime.jsx(
103
- chunk6R5Z2IQ5_js.GlassModal,
167
+ chunkULKZGM2T_js.GlassModal,
104
168
  {
105
169
  open: createOpen,
106
170
  onClose: () => setCreateOpen(false),
@@ -118,10 +182,10 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
118
182
  onCreateUser({ name, email, role });
119
183
  setCreateOpen(false);
120
184
  },
121
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunk6R5Z2IQ5_js.FormGrid, { children: [
122
- /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "name", label: labels.name, placeholder: labels.userNamePlaceholder, required: true }),
123
- /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "email", label: labels.email, placeholder: labels.userEmailPlaceholder, required: true, type: "email" }),
124
- /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormSelect, { name: "role", label: labels.role, options: ROLE_OPTIONS })
185
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkULKZGM2T_js.FormGrid, { children: [
186
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormInput, { name: "name", label: labels.name, placeholder: labels.userNamePlaceholder, required: true }),
187
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormInput, { name: "email", label: labels.email, placeholder: labels.userEmailPlaceholder, required: true, type: "email" }),
188
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormSelect, { name: "role", label: labels.role, options: ROLE_OPTIONS })
125
189
  ] })
126
190
  }
127
191
  )
@@ -147,7 +211,7 @@ function RolesPageView({
147
211
  const labelsAny = labels;
148
212
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
149
213
  /* @__PURE__ */ jsxRuntime.jsx(
150
- chunk6R5Z2IQ5_js.HeroSection,
214
+ chunkULKZGM2T_js.HeroSection,
151
215
  {
152
216
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-5 w-5" }),
153
217
  label: labels.title,
@@ -155,7 +219,7 @@ function RolesPageView({
155
219
  subtitle: labels.subtitle,
156
220
  gradient: "from-emerald-500 to-teal-600",
157
221
  toolbar: !isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
158
- chunk6R5Z2IQ5_js.SearchBar,
222
+ chunkULKZGM2T_js.SearchBar,
159
223
  {
160
224
  searchTerm,
161
225
  onSearchChange: setSearchTerm,
@@ -164,7 +228,7 @@ function RolesPageView({
164
228
  }
165
229
  ) : void 0,
166
230
  actions: /* @__PURE__ */ jsxRuntime.jsx(
167
- chunk6R5Z2IQ5_js.CreateActionButton,
231
+ chunkULKZGM2T_js.CreateActionButton,
168
232
  {
169
233
  mode: "desktop",
170
234
  label: labels.assign,
@@ -175,7 +239,7 @@ function RolesPageView({
175
239
  }
176
240
  ),
177
241
  /* @__PURE__ */ jsxRuntime.jsx(
178
- chunk6R5Z2IQ5_js.CreateActionButton,
242
+ chunkULKZGM2T_js.CreateActionButton,
179
243
  {
180
244
  mode: "mobile",
181
245
  label: labels.assign,
@@ -186,7 +250,7 @@ function RolesPageView({
186
250
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
187
251
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.definitions }),
188
252
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredRoleDefinitions.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(
189
- chunk6R5Z2IQ5_js.EntityCard,
253
+ chunkULKZGM2T_js.EntityCard,
190
254
  {
191
255
  accentGradient: "from-emerald-500 to-teal-700",
192
256
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-6 w-6" }) }),
@@ -203,7 +267,7 @@ function RolesPageView({
203
267
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
204
268
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.current }),
205
269
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredUsers.map((user) => /* @__PURE__ */ jsxRuntime.jsx(
206
- chunk6R5Z2IQ5_js.EntityCard,
270
+ chunkULKZGM2T_js.EntityCard,
207
271
  {
208
272
  accentGradient: "from-violet-500 to-indigo-700",
209
273
  icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-6 w-6" }) }),
@@ -215,7 +279,7 @@ function RolesPageView({
215
279
  )) })
216
280
  ] }),
217
281
  /* @__PURE__ */ jsxRuntime.jsx(
218
- chunk6R5Z2IQ5_js.GlassModal,
282
+ chunkULKZGM2T_js.GlassModal,
219
283
  {
220
284
  open: assignOpen,
221
285
  onClose: () => setAssignOpen(false),
@@ -232,9 +296,9 @@ function RolesPageView({
232
296
  onAssignRole({ email, role });
233
297
  setAssignOpen(false);
234
298
  },
235
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunk6R5Z2IQ5_js.FormGrid, { children: [
236
- /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "email", label: labels.userEmail, placeholder: "user@company.com", required: true }),
237
- /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormSelect, { name: "role", label: labels.role, options: roleOptions })
299
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkULKZGM2T_js.FormGrid, { children: [
300
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormInput, { name: "email", label: labels.userEmail, placeholder: "user@company.com", required: true }),
301
+ /* @__PURE__ */ jsxRuntime.jsx(chunkULKZGM2T_js.FormSelect, { name: "role", label: labels.role, options: roleOptions })
238
302
  ] })
239
303
  }
240
304
  )
@@ -242,11 +306,11 @@ function RolesPageView({
242
306
  }
243
307
  function WorkflowWorkspace({ graph }) {
244
308
  const locale = chunkYXN2K77G_js.useLocale();
245
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.Workspace, { initialGraph: graph, locale });
309
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkFKRIQYRG_js.Workspace, { initialGraph: graph, locale });
246
310
  }
247
311
 
248
312
  exports.RolesPageView = RolesPageView;
249
313
  exports.UsersPageView = UsersPageView;
250
314
  exports.WorkflowWorkspace = WorkflowWorkspace;
251
- //# sourceMappingURL=chunk-GDVB7QDZ.js.map
252
- //# sourceMappingURL=chunk-GDVB7QDZ.js.map
315
+ //# sourceMappingURL=chunk-V3UZCOZI.js.map
316
+ //# sourceMappingURL=chunk-V3UZCOZI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/pages/users-page-view.tsx","../src/platform/pages/roles-page-view.tsx","../src/platform/workflow-workspace.tsx"],"names":["useState","useMemo","jsxs","jsx","HeroSection","UserGroupIcon","SearchBar","FormSection","ChipPicker","Button","CreateActionButton","EntityCard","InlineForm","FormSelect","GlassModal","FormGrid","FormInput","ShieldCheckIcon","Badge","useLocale","Workspace"],"mappings":"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","file":"chunk-V3UZCOZI.js","sourcesContent":["import { useMemo, useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n ChipPicker,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSection,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\n SearchBar,\n type ActiveFilter,\n} from '@ui/index'\nimport type { UserRole, ManagedUser, UsersPageViewProps } from '@datatechsolutions/shared-domain/common'\n\nconst ROLE_OPTIONS: Array<{ value: UserRole; label: string }> = [\n { value: 'admin', label: 'Admin' },\n { value: 'manager', label: 'Manager' },\n { value: 'analyst', label: 'Analyst' },\n { value: 'viewer', label: 'Viewer' },\n]\n\nexport function UsersPageView({ labels, users, onCreateUser, onUpdateRole }: UsersPageViewProps) {\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const [filtersOpen, setFiltersOpen] = useState(false)\n const [selectedRoles, setSelectedRoles] = useState<string[]>([])\n const [activeFilter, setActiveFilter] = useState<'all' | 'active' | 'inactive'>('all')\n\n // `UsersPageViewProps` lives in shared-domain and doesn't yet declare the\n // new optional filter labels. Cast locally instead of mutating the shared\n // type — frontends pass extra keys as PT-BR strings and we fall back to\n // sensible defaults when omitted.\n const labelsAny = labels as Record<string, string | undefined>\n\n const isEmpty = users.length === 0\n\n const filteredUsers = useMemo(() => {\n const term = searchTerm.trim().toLowerCase()\n return users.filter((user) => {\n if (term && !user.name.toLowerCase().includes(term) && !user.email.toLowerCase().includes(term)) return false\n if (selectedRoles.length > 0 && !selectedRoles.includes(user.role)) return false\n if (activeFilter === 'active' && !user.active) return false\n if (activeFilter === 'inactive' && user.active) return false\n return true\n })\n }, [users, searchTerm, selectedRoles, activeFilter])\n\n const roleChipItems = useMemo(\n () => ROLE_OPTIONS.map((opt) => ({\n id: opt.value,\n name: opt.label,\n style: { bg: 'bg-violet-500/15 text-violet-700 dark:text-violet-300', text: '' },\n })),\n [],\n )\n\n const activeLabelFor = (value: 'all' | 'active' | 'inactive'): string => {\n if (value === 'active') return labelsAny.statusActive ?? labels.statusActive\n if (value === 'inactive') return labelsAny.statusInactive ?? labels.statusInactive\n return labelsAny.statusAll ?? 'Todos'\n }\n\n const activeFilters = useMemo<ActiveFilter[]>(() => {\n const chips: ActiveFilter[] = []\n for (const value of selectedRoles) {\n chips.push({ type: 'role', value, label: roleChipItems.find((i) => i.id === value)?.name ?? value })\n }\n if (activeFilter !== 'all') {\n chips.push({ type: 'active', value: activeFilter, label: activeLabelFor(activeFilter) })\n }\n return chips\n }, [selectedRoles, activeFilter, roleChipItems])\n\n const filterCount = activeFilters.length\n\n const removeFilter = (filter: ActiveFilter) => {\n if (filter.type === 'role') setSelectedRoles((prev) => prev.filter((v) => v !== filter.value))\n if (filter.type === 'active') setActiveFilter('all')\n }\n\n const clearAllFilters = () => {\n setSelectedRoles([])\n setActiveFilter('all')\n }\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<UserGroupIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-600\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n noBorder\n activeFilters={activeFilters}\n onRemoveFilter={removeFilter}\n onClearAll={filterCount > 0 ? clearAllFilters : undefined}\n filtersModal={{\n open: filtersOpen,\n onOpen: () => setFiltersOpen(true),\n onClose: () => setFiltersOpen(false),\n title: labelsAny.filtersTitle ?? 'Filtros',\n count: filterCount,\n onClear: filterCount > 0 ? clearAllFilters : undefined,\n children: (\n <div className=\"space-y-5\">\n <FormSection title={labelsAny.filterByRole ?? labels.role}>\n <ChipPicker\n items={roleChipItems}\n selectedIds={selectedRoles}\n onChange={setSelectedRoles}\n selectedLabel={labelsAny.selected ?? 'selecionados'}\n selectAllLabel={labelsAny.selectAll ?? 'Selecionar todos'}\n clearLabel={labelsAny.clear ?? 'Limpar'}\n />\n </FormSection>\n\n <FormSection title={labelsAny.filterByStatus ?? labels.status}>\n <div className=\"flex flex-wrap gap-2\">\n {(['all', 'active', 'inactive'] as const).map((value) => (\n activeFilter === value\n ? <Button key={value} type=\"button\" size=\"sm\" color=\"ios-glass-blue\" onClick={() => setActiveFilter(value)}>{activeLabelFor(value)}</Button>\n : <Button key={value} type=\"button\" size=\"sm\" outline onClick={() => setActiveFilter(value)}>{activeLabelFor(value)}</Button>\n ))}\n </div>\n </FormSection>\n </div>\n ),\n }}\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.list}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user: ManagedUser) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <UserGroupIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${\n user.active\n ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300'\n : 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300'\n }`}\n >\n {user.active ? labels.statusActive : labels.statusInactive}\n </span>\n )}\n footer={(\n <form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n onUpdateRole({ email: user.email, role })\n }}\n >\n <InlineForm>\n <FormSelect name=\"role\" options={ROLE_OPTIONS} defaultValue={user.role} />\n <Button type=\"submit\" outline size=\"sm\">{labels.save}</Button>\n </InlineForm>\n </form>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.create}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.list}\n submitLabel={labels.add}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!name || !email) return\n onCreateUser({ name, email, role })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.userNamePlaceholder} required />\n <FormInput name=\"email\" label={labels.email} placeholder={labels.userEmailPlaceholder} required type=\"email\" />\n <FormSelect name=\"role\" label={labels.role} options={ROLE_OPTIONS} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { useState, type FormEvent } from 'react'\nimport { ShieldCheckIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n SearchBar,\n} from '@ui/index'\nimport type { UserRole, RolesPageViewProps } from '@datatechsolutions/shared-domain/common'\nimport type { PlatformRoleDefinition } from '../rbac'\n\nexport type RolesPageViewExtraProps = {\n /**\n * App-defined role definitions, e.g. `{ admin: { id, label, description }, ... }`.\n * Each app passes the output of its own `createPlatformRbac()` call.\n */\n roleDefinitions: Record<string, PlatformRoleDefinition<string>>\n /**\n * Display options surfaced in the role-assignment modal select. Each\n * entry is `{ value: roleId, label: localizedLabel }`.\n */\n roleOptions: Array<{ value: string; label: string }>\n}\n\nexport function RolesPageView({\n labels,\n users,\n onAssignRole,\n roleDefinitions,\n roleOptions,\n}: RolesPageViewProps & RolesPageViewExtraProps) {\n const [assignOpen, setAssignOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allRoleDefinitions = Object.values(roleDefinitions)\n const allUsers = users\n const term = searchTerm.trim().toLowerCase()\n const filteredRoleDefinitions = term\n ? allRoleDefinitions.filter((role) => role.label.toLowerCase().includes(term))\n : allRoleDefinitions\n const filteredUsers = term\n ? allUsers.filter((user) =>\n user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term),\n )\n : allUsers\n const isEmpty = allRoleDefinitions.length === 0 && allUsers.length === 0\n const labelsAny = labels as Record<string, string>\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<ShieldCheckIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-600\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.definitions}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredRoleDefinitions.map((role) => (\n <EntityCard\n key={role.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={role.label}\n subtitle={role.id}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{role.description}</p>\n <p className=\"mt-2 text-xs font-medium text-slate-600 dark:text-slate-300\">\n {labels.permissionsEnabled}\n </p>\n </EntityCard>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.current}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <Badge color=\"violet\" size=\"xs\">{user.role}</Badge>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={assignOpen}\n onClose={() => setAssignOpen(false)}\n title={labels.assign}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.current}\n submitLabel={labels.apply}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!email) return\n onAssignRole({ email, role })\n setAssignOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"email\" label={labels.userEmail} placeholder=\"user@company.com\" required />\n <FormSelect name=\"role\" label={labels.role} options={roleOptions} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe/contracts'\nimport type { WorkflowWorkspaceProps } from '@datatechsolutions/shared-domain/common'\nimport { useLocale } from '@ui/lib/i18n-context'\n\n/**\n * Thin wrapper that forwards a workflow graph into the visual canvas while\n * threading the active locale from the i18n context. The graph type from\n * `shared-domain` is structurally identical to ui's contract type — the\n * cast keeps callers from having to import both.\n */\nexport function WorkflowWorkspace({ graph }: WorkflowWorkspaceProps) {\n const locale = useLocale()\n return <Workspace initialGraph={graph as unknown as UiWorkflowGraph} locale={locale} />\n}\n"]}