@datatechsolutions/ui 3.7.3 → 3.7.4

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 (159) 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-5W6LMDXV.mjs → chunk-4HP7XS5I.mjs} +4 -4
  6. package/dist/{chunk-5W6LMDXV.mjs.map → chunk-4HP7XS5I.mjs.map} +1 -1
  7. package/dist/{chunk-7JZFNKJD.js → chunk-7WIWDSF6.js} +36 -36
  8. package/dist/{chunk-7JZFNKJD.js.map → chunk-7WIWDSF6.js.map} +1 -1
  9. package/dist/{chunk-FKUIVS6I.js → chunk-BEUPW5WS.js} +28 -28
  10. package/dist/{chunk-FKUIVS6I.js.map → chunk-BEUPW5WS.js.map} +1 -1
  11. package/dist/{chunk-PYNXIDG3.mjs → chunk-CTCO2YI5.mjs} +3 -3
  12. package/dist/{chunk-PYNXIDG3.mjs.map → chunk-CTCO2YI5.mjs.map} +1 -1
  13. package/dist/{chunk-A4A3SQTV.mjs → chunk-DCBRGVD3.mjs} +3 -3
  14. package/dist/{chunk-A4A3SQTV.mjs.map → chunk-DCBRGVD3.mjs.map} +1 -1
  15. package/dist/{chunk-E57RZXOR.js → chunk-DWIBK7GV.js} +25 -25
  16. package/dist/{chunk-E57RZXOR.js.map → chunk-DWIBK7GV.js.map} +1 -1
  17. package/dist/{chunk-5YVOLHSW.mjs → chunk-EIZM2EQA.mjs} +4 -4
  18. package/dist/{chunk-5YVOLHSW.mjs.map → chunk-EIZM2EQA.mjs.map} +1 -1
  19. package/dist/{chunk-TCP45Q4B.js → chunk-FIB2CFJK.js} +9 -9
  20. package/dist/{chunk-TCP45Q4B.js.map → chunk-FIB2CFJK.js.map} +1 -1
  21. package/dist/{chunk-32DHEVOH.mjs → chunk-GAN7AKZ2.mjs} +3 -3
  22. package/dist/{chunk-32DHEVOH.mjs.map → chunk-GAN7AKZ2.mjs.map} +1 -1
  23. package/dist/{chunk-FNA66TT4.js → chunk-GD6FHRHV.js} +3 -3
  24. package/dist/{chunk-FNA66TT4.js.map → chunk-GD6FHRHV.js.map} +1 -1
  25. package/dist/{chunk-PCUINUIC.mjs → chunk-IKH5IRDK.mjs} +3 -3
  26. package/dist/{chunk-PCUINUIC.mjs.map → chunk-IKH5IRDK.mjs.map} +1 -1
  27. package/dist/{chunk-VS6PTRQ7.mjs → chunk-IKHWYYZC.mjs} +3 -3
  28. package/dist/{chunk-VS6PTRQ7.mjs.map → chunk-IKHWYYZC.mjs.map} +1 -1
  29. package/dist/{chunk-3H5CFLVK.js → chunk-IYDGO7RW.js} +135 -135
  30. package/dist/{chunk-3H5CFLVK.js.map → chunk-IYDGO7RW.js.map} +1 -1
  31. package/dist/{chunk-CZZOCKEA.mjs → chunk-JUDQX6MP.mjs} +3 -3
  32. package/dist/{chunk-CZZOCKEA.mjs.map → chunk-JUDQX6MP.mjs.map} +1 -1
  33. package/dist/{chunk-HBOORO52.js → chunk-KI4UPW4Z.js} +4 -4
  34. package/dist/{chunk-HBOORO52.js.map → chunk-KI4UPW4Z.js.map} +1 -1
  35. package/dist/{chunk-Q4QORAMH.js → chunk-MFAVWJWE.js} +10 -10
  36. package/dist/{chunk-Q4QORAMH.js.map → chunk-MFAVWJWE.js.map} +1 -1
  37. package/dist/{chunk-KKXI7CPF.mjs → chunk-MGZTZELL.mjs} +3 -3
  38. package/dist/{chunk-KKXI7CPF.mjs.map → chunk-MGZTZELL.mjs.map} +1 -1
  39. package/dist/{chunk-ZP37M2QK.mjs → chunk-MRLEINJN.mjs} +7 -7
  40. package/dist/{chunk-ZP37M2QK.mjs.map → chunk-MRLEINJN.mjs.map} +1 -1
  41. package/dist/{chunk-57E4TCB2.mjs → chunk-N5365CGD.mjs} +3 -3
  42. package/dist/{chunk-57E4TCB2.mjs.map → chunk-N5365CGD.mjs.map} +1 -1
  43. package/dist/{chunk-EWYAM4WJ.mjs → chunk-P7GVXI7Y.mjs} +3 -3
  44. package/dist/{chunk-EWYAM4WJ.mjs.map → chunk-P7GVXI7Y.mjs.map} +1 -1
  45. package/dist/{chunk-3X3IYDG6.js → chunk-QL2JYRBN.js} +68 -68
  46. package/dist/{chunk-3X3IYDG6.js.map → chunk-QL2JYRBN.js.map} +1 -1
  47. package/dist/{chunk-RCHTRG7R.js → chunk-R2RPRRB4.js} +55 -55
  48. package/dist/{chunk-RCHTRG7R.js.map → chunk-R2RPRRB4.js.map} +1 -1
  49. package/dist/{chunk-H37VDL7Y.js → chunk-RBB5YGWH.js} +4 -4
  50. package/dist/{chunk-H37VDL7Y.js.map → chunk-RBB5YGWH.js.map} +1 -1
  51. package/dist/{chunk-TJPPZU77.js → chunk-SUU7XPRX.js} +34 -34
  52. package/dist/{chunk-TJPPZU77.js.map → chunk-SUU7XPRX.js.map} +1 -1
  53. package/dist/{chunk-F35GFICG.js → chunk-VDO6MDQW.js} +13 -13
  54. package/dist/{chunk-F35GFICG.js.map → chunk-VDO6MDQW.js.map} +1 -1
  55. package/dist/{chunk-VPFVW7ZF.js → chunk-XT76DMP5.js} +35 -35
  56. package/dist/{chunk-VPFVW7ZF.js.map → chunk-XT76DMP5.js.map} +1 -1
  57. package/dist/{chunk-WDBVIU7W.mjs → chunk-YNHQ36UU.mjs} +3 -3
  58. package/dist/{chunk-WDBVIU7W.mjs.map → chunk-YNHQ36UU.mjs.map} +1 -1
  59. package/dist/{chunk-E6C7MFHJ.mjs → chunk-Z3BMHKKH.mjs} +3 -3
  60. package/dist/{chunk-E6C7MFHJ.mjs.map → chunk-Z3BMHKKH.mjs.map} +1 -1
  61. package/dist/{chunk-Q7HRCCFT.js → chunk-ZF7RJNPD.js} +45 -45
  62. package/dist/{chunk-Q7HRCCFT.js.map → chunk-ZF7RJNPD.js.map} +1 -1
  63. package/dist/{chunk-74BU2EBZ.mjs → chunk-ZWLMKOHZ.mjs} +6 -6
  64. package/dist/{chunk-74BU2EBZ.mjs.map → chunk-ZWLMKOHZ.mjs.map} +1 -1
  65. package/dist/index.js +665 -665
  66. package/dist/index.mjs +2 -2
  67. package/dist/platform/admin/index.js +10 -10
  68. package/dist/platform/admin/index.mjs +4 -4
  69. package/dist/platform/agents-workspace.js +7 -7
  70. package/dist/platform/agents-workspace.mjs +6 -6
  71. package/dist/platform/app-shell.js +4 -4
  72. package/dist/platform/app-shell.mjs +3 -3
  73. package/dist/platform/auth/index.js +22 -22
  74. package/dist/platform/auth/index.mjs +4 -4
  75. package/dist/platform/billing/index.js +4 -4
  76. package/dist/platform/billing/index.mjs +3 -3
  77. package/dist/platform/impersonation/index.js +4 -4
  78. package/dist/platform/impersonation/index.mjs +3 -3
  79. package/dist/platform/index.js +86 -86
  80. package/dist/platform/index.mjs +18 -18
  81. package/dist/platform/pages/index.js +416 -254
  82. package/dist/platform/pages/index.js.map +1 -1
  83. package/dist/platform/pages/index.mjs +193 -31
  84. package/dist/platform/pages/index.mjs.map +1 -1
  85. package/dist/platform/settings/index.js +7 -7
  86. package/dist/platform/settings/index.mjs +6 -6
  87. package/dist/platform/workflow-canvas-shell.js +5 -5
  88. package/dist/platform/workflow-canvas-shell.mjs +4 -4
  89. package/package.json +1 -1
  90. package/dist/astrlabe/contracts.d.mts +0 -517
  91. package/dist/astrlabe/contracts.d.ts +0 -517
  92. package/dist/astrlabe/graph-node.d.mts +0 -28
  93. package/dist/astrlabe/graph-node.d.ts +0 -28
  94. package/dist/astrlabe/index.d.mts +0 -743
  95. package/dist/astrlabe/index.d.ts +0 -743
  96. package/dist/astrlabe/utils.d.mts +0 -60
  97. package/dist/astrlabe/utils.d.ts +0 -60
  98. package/dist/astrlabe/workflow-canvas.d.mts +0 -6
  99. package/dist/astrlabe/workflow-canvas.d.ts +0 -6
  100. package/dist/astrlabe/workflow-preview-canvas.d.mts +0 -10
  101. package/dist/astrlabe/workflow-preview-canvas.d.ts +0 -10
  102. package/dist/billing-panel-DsHhhJqG.d.mts +0 -18
  103. package/dist/billing-panel-DsHhhJqG.d.ts +0 -18
  104. package/dist/brand/index.d.mts +0 -71
  105. package/dist/brand/index.d.ts +0 -71
  106. package/dist/dynamic-island-confirm-BKsZkAEP.d.mts +0 -17
  107. package/dist/dynamic-island-confirm-BKsZkAEP.d.ts +0 -17
  108. package/dist/index-BNRGVAS5.d.mts +0 -222
  109. package/dist/index-BoebbJ44.d.mts +0 -49
  110. package/dist/index-BoebbJ44.d.ts +0 -49
  111. package/dist/index-CnCY-b5V.d.ts +0 -222
  112. package/dist/index.d.mts +0 -5316
  113. package/dist/index.d.ts +0 -5316
  114. package/dist/layout-engine-YZcVr20M.d.mts +0 -19
  115. package/dist/layout-engine-YZcVr20M.d.ts +0 -19
  116. package/dist/lib/i18n-context.d.mts +0 -36
  117. package/dist/lib/i18n-context.d.ts +0 -36
  118. package/dist/lib/router-context.d.mts +0 -35
  119. package/dist/lib/router-context.d.ts +0 -35
  120. package/dist/navigation-BiWVffAN.d.mts +0 -49
  121. package/dist/navigation-BiWVffAN.d.ts +0 -49
  122. package/dist/platform/admin/index.d.mts +0 -17
  123. package/dist/platform/admin/index.d.ts +0 -17
  124. package/dist/platform/agents-workspace.d.mts +0 -19
  125. package/dist/platform/agents-workspace.d.ts +0 -19
  126. package/dist/platform/app-shell.d.mts +0 -64
  127. package/dist/platform/app-shell.d.ts +0 -64
  128. package/dist/platform/auth/index.d.mts +0 -73
  129. package/dist/platform/auth/index.d.ts +0 -73
  130. package/dist/platform/billing/index.d.mts +0 -29
  131. package/dist/platform/billing/index.d.ts +0 -29
  132. package/dist/platform/impersonation/index.d.mts +0 -19
  133. package/dist/platform/impersonation/index.d.ts +0 -19
  134. package/dist/platform/index.d.mts +0 -188
  135. package/dist/platform/index.d.ts +0 -188
  136. package/dist/platform/pages/index.d.mts +0 -526
  137. package/dist/platform/pages/index.d.ts +0 -526
  138. package/dist/platform/rbac.d.mts +0 -42
  139. package/dist/platform/rbac.d.ts +0 -42
  140. package/dist/platform/settings/index.d.mts +0 -31
  141. package/dist/platform/settings/index.d.ts +0 -31
  142. package/dist/platform/telemetry/index.d.mts +0 -51
  143. package/dist/platform/telemetry/index.d.ts +0 -51
  144. package/dist/platform/utils/index.d.mts +0 -32
  145. package/dist/platform/utils/index.d.ts +0 -32
  146. package/dist/platform/windsock-admin-client.d.mts +0 -57
  147. package/dist/platform/windsock-admin-client.d.ts +0 -57
  148. package/dist/platform/workflow-api-client.d.mts +0 -6
  149. package/dist/platform/workflow-api-client.d.ts +0 -6
  150. package/dist/platform/workflow-canvas-shell.d.mts +0 -18
  151. package/dist/platform/workflow-canvas-shell.d.ts +0 -18
  152. package/dist/rule-form-BYJzyork.d.mts +0 -128
  153. package/dist/rule-form-BYJzyork.d.ts +0 -128
  154. package/dist/workflow-api-client-CpFl3WcG.d.mts +0 -468
  155. package/dist/workflow-api-client-uLICOanv.d.ts +0 -468
  156. package/dist/workflow-canvas--qaYKuMm.d.ts +0 -113
  157. package/dist/workflow-canvas-B80fmD_n.d.mts +0 -113
  158. package/dist/workflow-store-o17I6L6A.d.ts +0 -79
  159. package/dist/workflow-store-ppVHdMZi.d.mts +0 -79
@@ -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-XT76DMP5.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 { useAuth, InlineSpinner, SectionCard, StatusBadge, ListCard, ListCardItem } from './chunk-E6C7MFHJ.mjs';
2
+ import { useAuth, InlineSpinner, SectionCard, StatusBadge, ListCard, ListCardItem } from './chunk-Z3BMHKKH.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';
@@ -235,5 +235,5 @@ function BillingPanel({
235
235
  }
236
236
 
237
237
  export { BillingPanel };
238
- //# sourceMappingURL=chunk-WDBVIU7W.mjs.map
239
- //# sourceMappingURL=chunk-WDBVIU7W.mjs.map
238
+ //# sourceMappingURL=chunk-YNHQ36UU.mjs.map
239
+ //# sourceMappingURL=chunk-YNHQ36UU.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/platform/billing/billing-panel.tsx"],"names":[],"mappings":"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","file":"chunk-WDBVIU7W.mjs","sourcesContent":["// =============================================================================\n// @datatechsolutions/windsock/ui — BillingPanel\n// Shows the current organization subscription plus the plan catalogue, with\n// actions for opening the Stripe portal, starting checkout, or cancelling.\n// Backed by `AuthClient.getSubscription / getPlans / createPortalSession /\n// createCheckoutSession / cancelSubscription`.\n// =============================================================================\n\nimport { useEffect, useState, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n Badge,\n StatusBadge,\n InlineSpinner,\n ListCard,\n ListCardItem,\n triggerHaptic,\n} from '@ui/index'\nimport type {\n SubscriptionDetails,\n PlanDefinition,\n SubscriptionTier,\n} from '@datatechsolutions/shared-domain'\nimport { useAuth } from '../../_auth'\n\nexport interface BillingPanelProps {\n /**\n * Which billing interval to prefer when starting checkout. Defaults to\n * `'monthly'`. Surface a toggle in the host app if both matter.\n */\n defaultBillingInterval?: 'monthly' | 'yearly'\n /**\n * Called after the portal/checkout URL is resolved. Defaults to\n * `window.location.assign(url)`. Override to open in a new tab, use a\n * router, etc.\n */\n onRedirect?: (url: string) => void\n}\n\nconst TIER_ORDER: Record<SubscriptionTier, number> = {\n free_trial: 0,\n starter: 1,\n professional: 2,\n enterprise: 3,\n}\n\nexport function BillingPanel({\n defaultBillingInterval = 'monthly',\n onRedirect,\n}: BillingPanelProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n const { client } = useAuth()\n\n const [subscription, setSubscription] = useState<SubscriptionDetails | null>(null)\n const [plans, setPlans] = useState<PlanDefinition[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [busyAction, setBusyAction] = useState<string | null>(null)\n\n const redirect = useCallback((url: string) => {\n if (onRedirect) {\n onRedirect(url)\n } else if (typeof window !== 'undefined') {\n window.location.assign(url)\n }\n }, [onRedirect])\n\n const load = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const [sub, availablePlans] = await Promise.all([\n client.getSubscription(),\n client.getPlans(),\n ])\n setSubscription(sub)\n setPlans(\n [...availablePlans]\n .filter((plan: { active: boolean }) => plan.active)\n .sort(\n (a: { tier: SubscriptionTier }, b: { tier: SubscriptionTier }) =>\n (TIER_ORDER[a.tier] ?? 0) - (TIER_ORDER[b.tier] ?? 0),\n ),\n )\n } catch (loadError) {\n setError(loadError instanceof Error ? loadError.message : String(loadError))\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n void load()\n }, [load])\n\n const handleOpenPortal = useCallback(async () => {\n setBusyAction('portal')\n triggerHaptic('light')\n try {\n const { url } = await client.createPortalSession()\n redirect(url)\n } catch (portalError) {\n setError(portalError instanceof Error ? portalError.message : String(portalError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, redirect])\n\n const handleStartCheckout = useCallback(async (planCode: string) => {\n setBusyAction(`checkout:${planCode}`)\n triggerHaptic('light')\n try {\n const { url } = await client.createCheckoutSession(planCode, defaultBillingInterval)\n redirect(url)\n } catch (checkoutError) {\n setError(checkoutError instanceof Error ? checkoutError.message : String(checkoutError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, defaultBillingInterval, redirect])\n\n const handleCancel = useCallback(async () => {\n if (typeof window !== 'undefined') {\n const confirmed = window.confirm(t('billing.cancelConfirm'))\n if (!confirmed) return\n }\n setBusyAction('cancel')\n triggerHaptic('warning')\n try {\n const result = await client.cancelSubscription()\n if (!result.success) {\n throw new Error(result.error ?? 'Subscription cancellation failed')\n }\n triggerHaptic('success')\n await load()\n } catch (cancelError) {\n setError(cancelError instanceof Error ? cancelError.message : String(cancelError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, load, t])\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <InlineSpinner />\n </div>\n )\n }\n\n const currentPlan = subscription?.plan ?? plans.find((plan) => plan.id === subscription?.planId) ?? null\n const currentTier = subscription?.tier ?? currentPlan?.tier ?? null\n\n return (\n <div className=\"space-y-6\">\n {error && (\n <div\n role=\"alert\"\n className=\"rounded-xl border border-red-300/40 bg-red-50/80 px-4 py-3 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-300\"\n >\n {error}\n </div>\n )}\n\n <SectionCard\n header={{\n title: t('billing.currentPlan.title'),\n subtitle: t('billing.currentPlan.description'),\n }}\n >\n {subscription && currentPlan ? (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <span className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {currentPlan.name}\n </span>\n <StatusBadge\n status={\n subscription.status === 'active' ? 'success'\n : subscription.status === 'past_due' ? 'pending'\n : 'error'\n }\n label={t(`billing.status.${subscription.status}`)}\n />\n {subscription.cancelAtPeriodEnd && (\n <Badge color=\"amber\">{t('billing.currentPlan.cancelAtPeriodEnd')}</Badge>\n )}\n </div>\n\n <dl className=\"grid grid-cols-1 gap-3 text-sm sm:grid-cols-2\">\n <div>\n <dt className=\"text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.price')}\n </dt>\n <dd className=\"font-medium text-gray-900 dark:text-white\">\n {format.number(currentPlan.price, { style: 'currency', currency: currentPlan.currency })}\n {' '}/{' '}\n {t(`billing.interval.${currentPlan.interval}`)}\n </dd>\n </div>\n {subscription.currentPeriodEnd && (\n <div>\n <dt className=\"text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.renewsOn')}\n </dt>\n <dd className=\"font-medium text-gray-900 dark:text-white\">\n {format.dateTime(new Date(subscription.currentPeriodEnd), { dateStyle: 'medium' })}\n </dd>\n </div>\n )}\n </dl>\n\n <div className=\"flex flex-wrap gap-2 pt-2\">\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={handleOpenPortal}\n loading={busyAction === 'portal'}\n disabled={busyAction !== null}\n >\n {t('billing.currentPlan.manageInPortal')}\n </Button>\n {subscription.status === 'active' && !subscription.cancelAtPeriodEnd && (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={handleCancel}\n loading={busyAction === 'cancel'}\n disabled={busyAction !== null}\n >\n {t('billing.currentPlan.cancel')}\n </Button>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.noSubscription')}\n </p>\n )}\n </SectionCard>\n\n <SectionCard\n header={{\n title: t('billing.plans.title'),\n subtitle: t('billing.plans.description'),\n }}\n >\n {plans.length === 0 ? (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('billing.plans.empty')}\n </p>\n ) : (\n <ListCard>\n {plans.map((plan) => {\n const isCurrent = currentPlan?.id === plan.id\n const isDowngrade = currentTier != null\n && (TIER_ORDER[plan.tier] ?? 0) < (TIER_ORDER[currentTier] ?? 0)\n return (\n <ListCardItem\n key={plan.id}\n leading={\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-500/20 to-blue-500/20 text-violet-600 dark:text-violet-300\">\n <span className=\"text-sm font-bold uppercase\">{plan.tier.charAt(0)}</span>\n </div>\n }\n trailing={\n isCurrent ? (\n <Badge color=\"green\">{t('billing.plans.currentBadge')}</Badge>\n ) : (\n isDowngrade ? (\n <Button\n size=\"sm\"\n plain\n onClick={() => handleStartCheckout(plan.code)}\n loading={busyAction === `checkout:${plan.code}`}\n disabled={busyAction !== null}\n >\n {t('billing.plans.downgradeAction')}\n </Button>\n ) : (\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={() => handleStartCheckout(plan.code)}\n loading={busyAction === `checkout:${plan.code}`}\n disabled={busyAction !== null}\n >\n {t('billing.plans.selectAction')}\n </Button>\n )\n )\n }\n >\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {plan.name}\n </p>\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n {format.number(plan.price, { style: 'currency', currency: plan.currency })}\n {' '}/{' '}\n {t(`billing.interval.${plan.interval}`)}\n </span>\n </div>\n {plan.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {plan.description}\n </p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n )}\n </SectionCard>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/platform/billing/billing-panel.tsx"],"names":[],"mappings":"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","file":"chunk-YNHQ36UU.mjs","sourcesContent":["// =============================================================================\n// @datatechsolutions/windsock/ui — BillingPanel\n// Shows the current organization subscription plus the plan catalogue, with\n// actions for opening the Stripe portal, starting checkout, or cancelling.\n// Backed by `AuthClient.getSubscription / getPlans / createPortalSession /\n// createCheckoutSession / cancelSubscription`.\n// =============================================================================\n\nimport { useEffect, useState, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n Badge,\n StatusBadge,\n InlineSpinner,\n ListCard,\n ListCardItem,\n triggerHaptic,\n} from '@ui/index'\nimport type {\n SubscriptionDetails,\n PlanDefinition,\n SubscriptionTier,\n} from '@datatechsolutions/shared-domain'\nimport { useAuth } from '../../_auth'\n\nexport interface BillingPanelProps {\n /**\n * Which billing interval to prefer when starting checkout. Defaults to\n * `'monthly'`. Surface a toggle in the host app if both matter.\n */\n defaultBillingInterval?: 'monthly' | 'yearly'\n /**\n * Called after the portal/checkout URL is resolved. Defaults to\n * `window.location.assign(url)`. Override to open in a new tab, use a\n * router, etc.\n */\n onRedirect?: (url: string) => void\n}\n\nconst TIER_ORDER: Record<SubscriptionTier, number> = {\n free_trial: 0,\n starter: 1,\n professional: 2,\n enterprise: 3,\n}\n\nexport function BillingPanel({\n defaultBillingInterval = 'monthly',\n onRedirect,\n}: BillingPanelProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n const { client } = useAuth()\n\n const [subscription, setSubscription] = useState<SubscriptionDetails | null>(null)\n const [plans, setPlans] = useState<PlanDefinition[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [busyAction, setBusyAction] = useState<string | null>(null)\n\n const redirect = useCallback((url: string) => {\n if (onRedirect) {\n onRedirect(url)\n } else if (typeof window !== 'undefined') {\n window.location.assign(url)\n }\n }, [onRedirect])\n\n const load = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const [sub, availablePlans] = await Promise.all([\n client.getSubscription(),\n client.getPlans(),\n ])\n setSubscription(sub)\n setPlans(\n [...availablePlans]\n .filter((plan: { active: boolean }) => plan.active)\n .sort(\n (a: { tier: SubscriptionTier }, b: { tier: SubscriptionTier }) =>\n (TIER_ORDER[a.tier] ?? 0) - (TIER_ORDER[b.tier] ?? 0),\n ),\n )\n } catch (loadError) {\n setError(loadError instanceof Error ? loadError.message : String(loadError))\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n void load()\n }, [load])\n\n const handleOpenPortal = useCallback(async () => {\n setBusyAction('portal')\n triggerHaptic('light')\n try {\n const { url } = await client.createPortalSession()\n redirect(url)\n } catch (portalError) {\n setError(portalError instanceof Error ? portalError.message : String(portalError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, redirect])\n\n const handleStartCheckout = useCallback(async (planCode: string) => {\n setBusyAction(`checkout:${planCode}`)\n triggerHaptic('light')\n try {\n const { url } = await client.createCheckoutSession(planCode, defaultBillingInterval)\n redirect(url)\n } catch (checkoutError) {\n setError(checkoutError instanceof Error ? checkoutError.message : String(checkoutError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, defaultBillingInterval, redirect])\n\n const handleCancel = useCallback(async () => {\n if (typeof window !== 'undefined') {\n const confirmed = window.confirm(t('billing.cancelConfirm'))\n if (!confirmed) return\n }\n setBusyAction('cancel')\n triggerHaptic('warning')\n try {\n const result = await client.cancelSubscription()\n if (!result.success) {\n throw new Error(result.error ?? 'Subscription cancellation failed')\n }\n triggerHaptic('success')\n await load()\n } catch (cancelError) {\n setError(cancelError instanceof Error ? cancelError.message : String(cancelError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, load, t])\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <InlineSpinner />\n </div>\n )\n }\n\n const currentPlan = subscription?.plan ?? plans.find((plan) => plan.id === subscription?.planId) ?? null\n const currentTier = subscription?.tier ?? currentPlan?.tier ?? null\n\n return (\n <div className=\"space-y-6\">\n {error && (\n <div\n role=\"alert\"\n className=\"rounded-xl border border-red-300/40 bg-red-50/80 px-4 py-3 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-300\"\n >\n {error}\n </div>\n )}\n\n <SectionCard\n header={{\n title: t('billing.currentPlan.title'),\n subtitle: t('billing.currentPlan.description'),\n }}\n >\n {subscription && currentPlan ? (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <span className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {currentPlan.name}\n </span>\n <StatusBadge\n status={\n subscription.status === 'active' ? 'success'\n : subscription.status === 'past_due' ? 'pending'\n : 'error'\n }\n label={t(`billing.status.${subscription.status}`)}\n />\n {subscription.cancelAtPeriodEnd && (\n <Badge color=\"amber\">{t('billing.currentPlan.cancelAtPeriodEnd')}</Badge>\n )}\n </div>\n\n <dl className=\"grid grid-cols-1 gap-3 text-sm sm:grid-cols-2\">\n <div>\n <dt className=\"text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.price')}\n </dt>\n <dd className=\"font-medium text-gray-900 dark:text-white\">\n {format.number(currentPlan.price, { style: 'currency', currency: currentPlan.currency })}\n {' '}/{' '}\n {t(`billing.interval.${currentPlan.interval}`)}\n </dd>\n </div>\n {subscription.currentPeriodEnd && (\n <div>\n <dt className=\"text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.renewsOn')}\n </dt>\n <dd className=\"font-medium text-gray-900 dark:text-white\">\n {format.dateTime(new Date(subscription.currentPeriodEnd), { dateStyle: 'medium' })}\n </dd>\n </div>\n )}\n </dl>\n\n <div className=\"flex flex-wrap gap-2 pt-2\">\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={handleOpenPortal}\n loading={busyAction === 'portal'}\n disabled={busyAction !== null}\n >\n {t('billing.currentPlan.manageInPortal')}\n </Button>\n {subscription.status === 'active' && !subscription.cancelAtPeriodEnd && (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={handleCancel}\n loading={busyAction === 'cancel'}\n disabled={busyAction !== null}\n >\n {t('billing.currentPlan.cancel')}\n </Button>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.noSubscription')}\n </p>\n )}\n </SectionCard>\n\n <SectionCard\n header={{\n title: t('billing.plans.title'),\n subtitle: t('billing.plans.description'),\n }}\n >\n {plans.length === 0 ? (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('billing.plans.empty')}\n </p>\n ) : (\n <ListCard>\n {plans.map((plan) => {\n const isCurrent = currentPlan?.id === plan.id\n const isDowngrade = currentTier != null\n && (TIER_ORDER[plan.tier] ?? 0) < (TIER_ORDER[currentTier] ?? 0)\n return (\n <ListCardItem\n key={plan.id}\n leading={\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-500/20 to-blue-500/20 text-violet-600 dark:text-violet-300\">\n <span className=\"text-sm font-bold uppercase\">{plan.tier.charAt(0)}</span>\n </div>\n }\n trailing={\n isCurrent ? (\n <Badge color=\"green\">{t('billing.plans.currentBadge')}</Badge>\n ) : (\n isDowngrade ? (\n <Button\n size=\"sm\"\n plain\n onClick={() => handleStartCheckout(plan.code)}\n loading={busyAction === `checkout:${plan.code}`}\n disabled={busyAction !== null}\n >\n {t('billing.plans.downgradeAction')}\n </Button>\n ) : (\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={() => handleStartCheckout(plan.code)}\n loading={busyAction === `checkout:${plan.code}`}\n disabled={busyAction !== null}\n >\n {t('billing.plans.selectAction')}\n </Button>\n )\n )\n }\n >\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {plan.name}\n </p>\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n {format.number(plan.price, { style: 'currency', currency: plan.currency })}\n {' '}/{' '}\n {t(`billing.interval.${plan.interval}`)}\n </span>\n </div>\n {plan.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {plan.description}\n </p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n )}\n </SectionCard>\n </div>\n )\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { useTranslations, useLocale } from './chunk-7VJ7CMMT.mjs';
3
2
  import { subscribeToRunEvents, submitApproval } from './chunk-RHRJXK5R.mjs';
3
+ import { useTranslations, useLocale } from './chunk-7VJ7CMMT.mjs';
4
4
  import { Link, TouchTarget, getTransition, springPresets, Button } from './chunk-WR55H7DH.mjs';
5
5
  import { triggerHaptic } from './chunk-D2JF6C3E.mjs';
6
6
  import { useRouter, usePathname } from './chunk-QWG2FMUN.mjs';
@@ -19993,5 +19993,5 @@ function useSocialProviders() {
19993
19993
  }
19994
19994
 
19995
19995
  export { ARGENTINA_ACCENT_MAP, ARGENTINA_MACRO_REGIONS, ARGENTINA_MAP_CENTER, ARGENTINA_PROVINCE_COORDINATES, ARGENTINA_PROVINCE_PALETTES, AR_THEME_CONFIG, AUSTRALIA_ACCENT_MAP, AUSTRALIA_MACRO_REGIONS, AUSTRALIA_MAP_CENTER, AUSTRALIA_STATE_COORDINATES, AUSTRALIA_STATE_PALETTES, AU_THEME_CONFIG, ActiveFilterChips, AgentAnalysisCard, AnalysisSkeleton, AnimatedNumber, AnimatedTableRow, AppLogo, AppNavigation, AppShell, ArchiveSwipeAction, AuthLayout, Avatar, AvatarButton, BRAZIL_ACCENT_MAP, BRAZIL_MACRO_REGIONS, BRAZIL_MAP_CENTER, BRAZIL_STATE_COORDINATES, BRAZIL_STATE_PALETTES, BR_THEME_CONFIG, BackupCodeGrid, BadRequestPage, BaseForm, BentoCard, BooleanFlagsPicker, BottomSafeArea, BrandFilterSkeleton, BrandedLoader, Breadcrumb, CANADA_ACCENT_MAP, CANADA_MACRO_REGIONS, CANADA_MAP_CENTER, CANADA_PROVINCE_COORDINATES, CANADA_PROVINCE_PALETTES, CA_THEME_CONFIG, CHILE_ACCENT_MAP, CHILE_MACRO_REGIONS, CHILE_MAP_CENTER, CHILE_REGION_COORDINATES, CHILE_REGION_PALETTES, CL_THEME_CONFIG, COLOMBIA_ACCENT_MAP, COLOMBIA_DEPARTMENT_COORDINATES, COLOMBIA_DEPARTMENT_PALETTES, COLOMBIA_MACRO_REGIONS, COLOMBIA_MAP_CENTER, CO_THEME_CONFIG, Card, CardContent, CardDescription, CardDivider, CardFooter, CardGridSkeleton, CardHeader, CardSectionHeader, CardTitle, CategoryBadge, CategoryTab, CategoryTabs, ChartRenderer, ChipPicker, CircularRefreshIndicator, Code, CollapsibleGroupedList, CompactSegmentedControl, ContactCard, ContactSection, Container, ContextMenu, CookieConsent, CopyableId, CreateActionButton, DE_THEME_CONFIG, DashboardView, DataPagination, DatePicker, DeleteSwipeAction, Description3 as Description, DetailsPopover, DevModeBanner, Dialog4 as Dialog, DialogActions, DialogBody, DialogDescription, DialogTitle3 as DialogTitle, Divider, Dock, DockContainer, DockSkeleton, DotRefreshIndicator, DropdownSelect, DynamicIsland, DynamicIslandConfirm, DynamicIslandNotification, EGYPT_ACCENT_MAP, EGYPT_GOVERNORATE_COORDINATES, EGYPT_GOVERNORATE_PALETTES, EGYPT_MACRO_REGIONS, EGYPT_MAP_CENTER, EG_THEME_CONFIG, ES_THEME_CONFIG, EdgeSwipeIndicator, EdgeSwipeProvider, EditSwipeAction, EmptyState, EntityCard, ErrorMessage, ErrorState, ExpandableHistoryList, ExpandingPageIndicator, FRANCE_ACCENT_MAP, FRANCE_MACRO_REGIONS, FRANCE_MAP_CENTER, FRANCE_REGION_COORDINATES, FRANCE_REGION_PALETTES, FR_THEME_CONFIG, FavoriteSwipeAction, FeatureCard, FeedItemCard, Field2 as Field, FieldGroup, Fieldset2 as Fieldset, FilterSectionHeader, FilterTileButton, FlyoutMenu, FlyoutNavGrid, FlyoutQuickActions, ForceTouchMenu, Form, FormActions, FormActionsRow, FormCheckbox, FormField, FormGrid, FormInput, FormPriceInput, FormSection, FormSelect, FormTextarea, FormToggle, GB_THEME_CONFIG, GERMANY_ACCENT_MAP, GERMANY_MACRO_REGIONS, GERMANY_MAP_CENTER, GERMANY_STATE_COORDINATES, GERMANY_STATE_PALETTES, GeoMapCanvas, GeoMapLegend, GlassModal, Gradient, GradientBackground, GrowthIndicator, Heading, HeroBlock, HeroPanel, HeroSection, ID_THEME_CONFIG, INDIA_ACCENT_MAP, INDIA_MACRO_REGIONS, INDIA_MAP_CENTER, INDIA_STATE_COORDINATES, INDIA_STATE_PALETTES, INDONESIA_ACCENT_MAP, INDONESIA_MACRO_REGIONS, INDONESIA_MAP_CENTER, INDONESIA_PROVINCE_COORDINATES, INDONESIA_PROVINCE_PALETTES, IN_THEME_CONFIG, ITALY_ACCENT_MAP, ITALY_MACRO_REGIONS, ITALY_MAP_CENTER, ITALY_REGION_COORDINATES, ITALY_REGION_PALETTES, IT_THEME_CONFIG, ImageUpload, InfoPopover, InlineForm, InlineSpinner, Input, InputRequestForm, InteractiveGeoMap, ItemSummary, JAPAN_ACCENT_MAP, JAPAN_MACRO_REGIONS, JAPAN_MAP_CENTER, JAPAN_PREFECTURE_COORDINATES, JAPAN_PREFECTURE_PALETTES, JP_THEME_CONFIG, KORI_ERP_LOADER, KR_THEME_CONFIG, LOCALE_FLAGS, Label2 as Label, LabeledToggle, LanguageSwitcher, LaunchpadGrid, Lead, Legend2 as Legend, LiquidFilterInput, ListCard, ListCardItem, ListItem, LoadingOverlay, MEXICO_ACCENT_MAP, MEXICO_MACRO_REGIONS, MEXICO_MAP_CENTER, MEXICO_STATE_COORDINATES, MEXICO_STATE_PALETTES, MX_THEME_CONFIG, ManagementPageLayout, ManagementSurface, MapZoomControls, MarketPricesCard, MetricCard, MonthPicker, MultiColumnPicker, NETHERLANDS_ACCENT_MAP, NETHERLANDS_MACRO_REGIONS, NETHERLANDS_MAP_CENTER, NETHERLANDS_PROVINCE_COORDINATES, NETHERLANDS_PROVINCE_PALETTES, NEW_ZEALAND_ACCENT_MAP, NEW_ZEALAND_MACRO_REGIONS, NEW_ZEALAND_MAP_CENTER, NEW_ZEALAND_REGION_COORDINATES, NEW_ZEALAND_REGION_PALETTES, NG_THEME_CONFIG, NIGERIA_ACCENT_MAP, NIGERIA_MACRO_REGIONS, NIGERIA_MAP_CENTER, NIGERIA_STATE_COORDINATES, NIGERIA_STATE_PALETTES, NL_THEME_CONFIG, NORWAY_ACCENT_MAP, NORWAY_COUNTY_COORDINATES, NORWAY_COUNTY_PALETTES, NORWAY_MACRO_REGIONS, NORWAY_MAP_CENTER, NO_THEME_CONFIG, NZ_THEME_CONFIG, NavigationProgress, NoDataState, NoResultsState, NotFoundPage, NotificationBadge, NotificationBellButton, NotificationProvider, OfficeCard, OfflineState, OptionGrid, OtpInput, PERU_ACCENT_MAP, PERU_DEPARTMENT_COORDINATES, PERU_DEPARTMENT_PALETTES, PERU_MACRO_REGIONS, PERU_MAP_CENTER, PE_THEME_CONFIG, PHILIPPINES_ACCENT_MAP, PHILIPPINES_MACRO_REGIONS, PHILIPPINES_MAP_CENTER, PHILIPPINES_PROVINCE_COORDINATES, PHILIPPINES_PROVINCE_PALETTES, PH_THEME_CONFIG, PL_THEME_CONFIG, POLAND_ACCENT_MAP, POLAND_MACRO_REGIONS, POLAND_MAP_CENTER, POLAND_VOIVODESHIP_COORDINATES, POLAND_VOIVODESHIP_PALETTES, PORTUGAL_ACCENT_MAP, PORTUGAL_DISTRICT_COORDINATES, PORTUGAL_DISTRICT_PALETTES, PORTUGAL_MACRO_REGIONS, PORTUGAL_MAP_CENTER, PT_THEME_CONFIG, PageEmptyState, PageErrorState, PageHeader, PageHeading, PageIndicator, PageLoadingState, PageSectionHeader, Pagination, PasswordInput, PasswordStrengthMeter, PlatformShell, PlusGrid, PlusGridItem, PlusGridRow, PreferenceSection, PriceChangeBadge, ProfileIdentityCard, Progress, ProgressIndicator, PullToRefreshContainer, PullToRefreshIndicator, RadiantHeading, RadiantStatCard, RadiantSubheading, RecommendationCard, RegionFilterSkeleton, SE_THEME_CONFIG, SOUTH_AFRICA_ACCENT_MAP, SOUTH_AFRICA_MACRO_REGIONS, SOUTH_AFRICA_MAP_CENTER, SOUTH_AFRICA_PROVINCE_COORDINATES, SOUTH_AFRICA_PROVINCE_PALETTES, SOUTH_KOREA_ACCENT_MAP, SOUTH_KOREA_MACRO_REGIONS, SOUTH_KOREA_MAP_CENTER, SOUTH_KOREA_PROVINCE_COORDINATES, SOUTH_KOREA_PROVINCE_PALETTES, SPAIN_ACCENT_MAP, SPAIN_MACRO_REGIONS, SPAIN_MAP_CENTER, SPAIN_PROVINCE_COORDINATES, SPAIN_PROVINCE_PALETTES, SWEDEN_ACCENT_MAP, SWEDEN_COUNTY_COORDINATES, SWEDEN_COUNTY_PALETTES, SWEDEN_MACRO_REGIONS, SWEDEN_MAP_CENTER, SafeArea, SafeAreaSpacer, SafeAreaView, SearchBar, SearchFilterToolbar, SearchInput, SectionCard, SectionHeader, SectionHeaderSkeleton, SegmentedControl, Select, SelectableTableRow, SelectionCard, ServerErrorPage, SettingsModal, Sheet, SkipToContent, SocialLoginButtons, SortableTableHeader, Spinner, StatCard, StatCardSkeleton, StatusBadge, StatusToggle, StepFormPage, StepNavigationButtons, StepTimeline, StreamingDashboard, Strong, Subheading, SwipeableRow, Switch2 as Switch, THAILAND_ACCENT_MAP, THAILAND_MACRO_REGIONS, THAILAND_MAP_CENTER, THAILAND_PROVINCE_COORDINATES, THAILAND_PROVINCE_PALETTES, TH_THEME_CONFIG, TR_THEME_CONFIG, TURKEY_ACCENT_MAP, TURKEY_MACRO_REGIONS, TURKEY_MAP_CENTER, TURKEY_PROVINCE_COORDINATES, TURKEY_PROVINCE_PALETTES, Table, TableBody, TableCell, TableEmptyState, TableHead, TableHeader, TableRow, TableSkeleton, TableSkeletonRow, Tabs, TabsContent, TabsList, TabsTrigger, Text, TextLink, Textarea, ThemeSwitch, ThemeToggle, ThemeToggleCompact, TimePicker, ToggleSwitch, UK_ACCENT_MAP, UK_MACRO_REGIONS, UK_MAP_CENTER, UK_NATION_COORDINATES, UK_NATION_PALETTES, US_ACCENT_MAP, US_MACRO_REGIONS, US_MAP_CENTER, US_STATE_COORDINATES, US_STATE_PALETTES, US_THEME_CONFIG, UiAuthProvider, UiPrefsProvider, WINDSOCK_LOADER, WIRE_LOADER, WheelPicker, WindsockIcon, ZA_THEME_CONFIG, buildDockActions, buildFlyoutNavItems, buildLaunchpadItems, computeDomain, computeSeries, filterByPermission, formatAddress, formatCurrency, formatCurrency2, formatDate, formatPercentage, getAllCountries, getArgentinaAccent, getArgentinaColors, getArgentinaFlagUrl, getArgentinaGradient, getArgentinaHexColor, getArgentinaPalette, getAustraliaAccent, getAustraliaColors, getAustraliaFlagUrl, getAustraliaGradient, getAustraliaHexColor, getAustraliaPalette, getBrazilAccent, getBrazilColors, getBrazilFlagUrl, getBrazilGradient, getBrazilHexColor, getBrazilPalette, getCanadaAccent, getCanadaColors, getCanadaFlagUrl, getCanadaGradient, getCanadaHexColor, getCanadaPalette, getChileAccent, getChileColors, getChileFlagUrl, getChileGradient, getChileHexColor, getChilePalette, getColombiaAccent, getColombiaColors, getColombiaFlagUrl, getColombiaGradient, getColombiaHexColor, getColombiaPalette, getCountryConfig, getEgyptAccent, getEgyptColors, getEgyptFlagUrl, getEgyptGradient, getEgyptHexColor, getEgyptPalette, getFranceAccent, getFranceColors, getFranceFlagUrl, getFranceGradient, getFranceHexColor, getFrancePalette, getGermanyAccent, getGermanyColors, getGermanyFlagUrl, getGermanyGradient, getGermanyHexColor, getGermanyPalette, getIndiaAccent, getIndiaColors, getIndiaFlagUrl, getIndiaGradient, getIndiaHexColor, getIndiaPalette, getIndonesiaAccent, getIndonesiaColors, getIndonesiaFlagUrl, getIndonesiaGradient, getIndonesiaHexColor, getIndonesiaPalette, getItalyAccent, getItalyColors, getItalyFlagUrl, getItalyGradient, getItalyHexColor, getItalyPalette, getJapanAccent, getJapanColors, getJapanFlagUrl, getJapanGradient, getJapanHexColor, getJapanPalette, getMexicoAccent, getMexicoColors, getMexicoFlagUrl, getMexicoGradient, getMexicoHexColor, getMexicoPalette, getNetherlandsAccent, getNetherlandsColors, getNetherlandsFlagUrl, getNetherlandsGradient, getNetherlandsHexColor, getNetherlandsPalette, getNewZealandAccent, getNewZealandColors, getNewZealandFlagUrl, getNewZealandGradient, getNewZealandHexColor, getNewZealandPalette, getNigeriaAccent, getNigeriaColors, getNigeriaFlagUrl, getNigeriaGradient, getNigeriaHexColor, getNigeriaPalette, getNorwayAccent, getNorwayColors, getNorwayFlagUrl, getNorwayGradient, getNorwayHexColor, getNorwayPalette, getPeruAccent, getPeruColors, getPeruFlagUrl, getPeruGradient, getPeruHexColor, getPeruPalette, getPhilippinesAccent, getPhilippinesColors, getPhilippinesFlagUrl, getPhilippinesGradient, getPhilippinesHexColor, getPhilippinesPalette, getPolandAccent, getPolandColors, getPolandFlagUrl, getPolandGradient, getPolandHexColor, getPolandPalette, getPortugalAccent, getPortugalColors, getPortugalFlagUrl, getPortugalGradient, getPortugalHexColor, getPortugalPalette, getSouthAfricaAccent, getSouthAfricaColors, getSouthAfricaFlagUrl, getSouthAfricaGradient, getSouthAfricaHexColor, getSouthAfricaPalette, getSouthKoreaAccent, getSouthKoreaColors, getSouthKoreaFlagUrl, getSouthKoreaGradient, getSouthKoreaHexColor, getSouthKoreaPalette, getSpainAccent, getSpainColors, getSpainFlagUrl, getSpainGradient, getSpainHexColor, getSpainPalette, getStatusColor, getSubdivisionAccent, getSubdivisionColors, getSubdivisionFlagUrl, getSubdivisionGradient, getSubdivisionHexColor, getSubdivisionPalette, getSwedenAccent, getSwedenColors, getSwedenFlagUrl, getSwedenGradient, getSwedenHexColor, getSwedenPalette, getThailandAccent, getThailandColors, getThailandFlagUrl, getThailandGradient, getThailandHexColor, getThailandPalette, getTurkeyAccent, getTurkeyColors, getTurkeyFlagUrl, getTurkeyGradient, getTurkeyHexColor, getTurkeyPalette, getUKAccent, getUKColors, getUKFlagUrl, getUKGradient, getUKHexColor, getUKPalette, getUsAccent, getUsColors, getUsFlagUrl, getUsGradient, getUsHexColor, getUsPalette, isValidArgentinaProvince, isValidAustraliaState, isValidBrazilState, isValidCanadaProvince, isValidChileRegion, isValidColombiaDepartment, isValidEgyptGovernorate, isValidFranceRegion, isValidGermanyState, isValidIndiaState, isValidIndonesiaProvince, isValidItalyRegion, isValidJapanPrefecture, isValidMexicoState, isValidNetherlandsProvince, isValidNewZealandRegion, isValidNigeriaState, isValidNorwayCounty, isValidPeruDepartment, isValidPhilippinesProvince, isValidPolandVoivodeship, isValidPortugalDistrict, isValidSouthAfricaProvince, isValidSouthKoreaProvince, isValidSpainProvince, isValidSubdivision, isValidSwedenCounty, isValidThailandProvince, isValidTurkeyProvince, isValidUKNation, isValidUsState, registerCountry, registerSubdivisionTheme, resolveGlassAccentRgb, selectIsAuthenticated, selectShowShellChrome, selectUserInitial, selectUserName, shimmerClass, shimmerWhiteClass, useAuth, useGeoMapState, useImpersonation, useNotifications, usePlatformPreferences, usePlatformShellStore, usePullToRefresh, useSocialProviders, validateDashboardSpec, xScale, yScale };
19996
- //# sourceMappingURL=chunk-E6C7MFHJ.mjs.map
19997
- //# sourceMappingURL=chunk-E6C7MFHJ.mjs.map
19996
+ //# sourceMappingURL=chunk-Z3BMHKKH.mjs.map
19997
+ //# sourceMappingURL=chunk-Z3BMHKKH.mjs.map