@datatechsolutions/ui 3.12.1 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/astrlabe/index.js +108 -108
- package/dist/astrlabe/index.mjs +4 -4
- package/dist/astrlabe/workflow-canvas.js +4 -4
- package/dist/astrlabe/workflow-canvas.mjs +3 -3
- package/dist/{chunk-HTODLUKG.js → chunk-2ECLDHAT.js} +12 -12
- package/dist/{chunk-HTODLUKG.js.map → chunk-2ECLDHAT.js.map} +1 -1
- package/dist/{chunk-NQGLSM46.mjs → chunk-4VHFGW7I.mjs} +4 -4
- package/dist/{chunk-NQGLSM46.mjs.map → chunk-4VHFGW7I.mjs.map} +1 -1
- package/dist/{chunk-ULKZGM2T.js → chunk-5ETT54QS.js} +37 -37
- package/dist/{chunk-ULKZGM2T.js.map → chunk-5ETT54QS.js.map} +1 -1
- package/dist/{chunk-N5GQIT7A.mjs → chunk-6KDTVSZT.mjs} +7 -7
- package/dist/{chunk-N5GQIT7A.mjs.map → chunk-6KDTVSZT.mjs.map} +1 -1
- package/dist/{chunk-VYU2FYDE.js → chunk-6YTYD4P5.js} +66 -66
- package/dist/{chunk-VYU2FYDE.js.map → chunk-6YTYD4P5.js.map} +1 -1
- package/dist/{chunk-YYNGXKUE.mjs → chunk-7TYNV6SY.mjs} +4 -4
- package/dist/{chunk-YYNGXKUE.mjs.map → chunk-7TYNV6SY.mjs.map} +1 -1
- package/dist/{chunk-RT264BD4.mjs → chunk-AHNH2PMI.mjs} +4 -4
- package/dist/{chunk-RT264BD4.mjs.map → chunk-AHNH2PMI.mjs.map} +1 -1
- package/dist/{chunk-RBH723MG.mjs → chunk-AKWCT53S.mjs} +4 -4
- package/dist/{chunk-RBH723MG.mjs.map → chunk-AKWCT53S.mjs.map} +1 -1
- package/dist/{chunk-MYHBXIO2.js → chunk-AMCFAGK3.js} +34 -34
- package/dist/{chunk-MYHBXIO2.js.map → chunk-AMCFAGK3.js.map} +1 -1
- package/dist/{chunk-UVFWKDRO.mjs → chunk-ANFSQJNI.mjs} +4 -4
- package/dist/{chunk-UVFWKDRO.mjs.map → chunk-ANFSQJNI.mjs.map} +1 -1
- package/dist/{chunk-BPMYNE7S.mjs → chunk-CSOMZ5UM.mjs} +4 -4
- package/dist/{chunk-BPMYNE7S.mjs.map → chunk-CSOMZ5UM.mjs.map} +1 -1
- package/dist/{chunk-FKRIQYRG.js → chunk-D5OTZGA2.js} +126 -127
- package/dist/chunk-D5OTZGA2.js.map +1 -0
- package/dist/{chunk-V3UZCOZI.js → chunk-IIRS5XZY.js} +32 -32
- package/dist/{chunk-V3UZCOZI.js.map → chunk-IIRS5XZY.js.map} +1 -1
- package/dist/{chunk-Z75CEP4V.js → chunk-K5567JM5.js} +13 -13
- package/dist/{chunk-Z75CEP4V.js.map → chunk-K5567JM5.js.map} +1 -1
- package/dist/{chunk-OM5NNUD2.mjs → chunk-KWH7JIRP.mjs} +3 -3
- package/dist/{chunk-OM5NNUD2.mjs.map → chunk-KWH7JIRP.mjs.map} +1 -1
- package/dist/{chunk-MFF37C24.js → chunk-MQDCUBVW.js} +150 -150
- package/dist/{chunk-MFF37C24.js.map → chunk-MQDCUBVW.js.map} +1 -1
- package/dist/{chunk-OW5LSEHU.mjs → chunk-MSKKNPRE.mjs} +3 -3
- package/dist/{chunk-OW5LSEHU.mjs.map → chunk-MSKKNPRE.mjs.map} +1 -1
- package/dist/{chunk-PLEWG2L7.js → chunk-N4YT3QA5.js} +15 -15
- package/dist/{chunk-PLEWG2L7.js.map → chunk-N4YT3QA5.js.map} +1 -1
- package/dist/{chunk-XGAPZT4J.js → chunk-NF5DDM5V.js} +40 -40
- package/dist/{chunk-XGAPZT4J.js.map → chunk-NF5DDM5V.js.map} +1 -1
- package/dist/{chunk-NK4H3JWN.mjs → chunk-OC4AOYU5.mjs} +4 -4
- package/dist/{chunk-NK4H3JWN.mjs.map → chunk-OC4AOYU5.mjs.map} +1 -1
- package/dist/{chunk-ID55ABBB.js → chunk-OY5HUZSD.js} +44 -44
- package/dist/{chunk-ID55ABBB.js.map → chunk-OY5HUZSD.js.map} +1 -1
- package/dist/{chunk-5OZTI7TR.js → chunk-PPIUMCUZ.js} +6 -6
- package/dist/{chunk-5OZTI7TR.js.map → chunk-PPIUMCUZ.js.map} +1 -1
- package/dist/{chunk-WLNY3GVM.mjs → chunk-QGRTV35L.mjs} +7 -7
- package/dist/{chunk-WLNY3GVM.mjs.map → chunk-QGRTV35L.mjs.map} +1 -1
- package/dist/{chunk-TDNBO3V7.js → chunk-SDYKXLCU.js} +56 -56
- package/dist/{chunk-TDNBO3V7.js.map → chunk-SDYKXLCU.js.map} +1 -1
- package/dist/{chunk-5TLKFOEL.mjs → chunk-UPYACFZJ.mjs} +5 -5
- package/dist/{chunk-5TLKFOEL.mjs.map → chunk-UPYACFZJ.mjs.map} +1 -1
- package/dist/{chunk-EDI46QA7.mjs → chunk-UXHJS2SH.mjs} +4 -5
- package/dist/chunk-UXHJS2SH.mjs.map +1 -0
- package/dist/{chunk-LRNVB7MO.js → chunk-VI4IUTMX.js} +4 -4
- package/dist/{chunk-LRNVB7MO.js.map → chunk-VI4IUTMX.js.map} +1 -1
- package/dist/{chunk-4D23CQZM.mjs → chunk-VIB42VMZ.mjs} +5 -5
- package/dist/{chunk-4D23CQZM.mjs.map → chunk-VIB42VMZ.mjs.map} +1 -1
- package/dist/{chunk-QSCWV47U.js → chunk-WOTKBKS6.js} +31 -31
- package/dist/{chunk-QSCWV47U.js.map → chunk-WOTKBKS6.js.map} +1 -1
- package/dist/{chunk-YXN2K77G.js → chunk-Y5VN4SPH.js} +26 -3
- package/dist/chunk-Y5VN4SPH.js.map +1 -0
- package/dist/{chunk-7VJ7CMMT.mjs → chunk-ZEFNBGYI.mjs} +26 -3
- package/dist/chunk-ZEFNBGYI.mjs.map +1 -0
- package/dist/{chunk-PIIY2Z2O.mjs → chunk-ZRCXDKBE.mjs} +3 -3
- package/dist/{chunk-PIIY2Z2O.mjs.map → chunk-ZRCXDKBE.mjs.map} +1 -1
- package/dist/index.js +668 -668
- package/dist/index.mjs +2 -2
- package/dist/lib/i18n-context.d.mts +12 -4
- package/dist/lib/i18n-context.d.ts +12 -4
- package/dist/lib/i18n-context.js +6 -6
- package/dist/lib/i18n-context.mjs +1 -1
- package/dist/platform/admin/index.js +10 -10
- package/dist/platform/admin/index.mjs +4 -4
- package/dist/platform/agents-workspace.js +7 -7
- package/dist/platform/agents-workspace.mjs +6 -6
- package/dist/platform/app-shell.js +4 -4
- package/dist/platform/app-shell.mjs +3 -3
- package/dist/platform/auth/index.js +22 -22
- package/dist/platform/auth/index.mjs +4 -4
- package/dist/platform/billing/index.js +4 -4
- package/dist/platform/billing/index.mjs +3 -3
- package/dist/platform/impersonation/index.js +4 -4
- package/dist/platform/impersonation/index.mjs +3 -3
- package/dist/platform/index.d.mts +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +96 -96
- package/dist/platform/index.mjs +18 -18
- package/dist/platform/pages/index.js +346 -346
- package/dist/platform/pages/index.mjs +8 -8
- package/dist/platform/settings/index.js +7 -7
- package/dist/platform/settings/index.mjs +6 -6
- package/dist/platform/workflow-canvas-shell.js +5 -5
- package/dist/platform/workflow-canvas-shell.mjs +4 -4
- package/package.json +2 -1
- package/dist/chunk-7VJ7CMMT.mjs.map +0 -1
- package/dist/chunk-EDI46QA7.mjs.map +0 -1
- package/dist/chunk-FKRIQYRG.js.map +0 -1
- package/dist/chunk-YXN2K77G.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk5ETT54QS_js = require('./chunk-5ETT54QS.js');
|
|
5
5
|
var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var outline = require('@heroicons/react/24/outline');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
|
|
10
10
|
function ImpersonationBanner({ onExit, className }) {
|
|
11
|
-
const { isImpersonating, claim, exit } =
|
|
11
|
+
const { isImpersonating, claim, exit } = chunk5ETT54QS_js.useImpersonation();
|
|
12
12
|
const [isExiting, setIsExiting] = react.useState(false);
|
|
13
13
|
if (!isImpersonating || !claim) return null;
|
|
14
14
|
const handleExit = async () => {
|
|
@@ -59,5 +59,5 @@ function ImpersonationBanner({ onExit, className }) {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
exports.ImpersonationBanner = ImpersonationBanner;
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
63
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-VI4IUTMX.js.map
|
|
63
|
+
//# sourceMappingURL=chunk-VI4IUTMX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/impersonation/impersonation-banner.tsx"],"names":["useImpersonation","useState","jsxs","jsx","EyeIcon","Fragment","Button","XMarkIcon"],"mappings":";;;;;;;;AAoBO,SAAS,mBAAA,CAAoB,EAAE,MAAA,EAAQ,SAAA,EAAU,EAA6B;AACnF,EAAA,MAAM,EAAE,eAAA,EAAiB,KAAA,EAAO,IAAA,KAASA,iCAAA,EAAiB;AAC1D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAS,KAAK,CAAA;AAEhD,EAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,KAAA,EAAO,OAAO,IAAA;AAEvC,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,EAAK;AACX,MAAA,MAAA,IAAS;AAAA,IACX,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EACE,kJAEC,SAAA,IAAa,EAAA,CAAA;AAAA,MAGhB,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,eAAA,EAAA,EAAQ,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,0CACxD,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,YAAA,8DAAA;AAAA,YACoD,GAAA;AAAA,4BACxDD,cAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,IAAS,MAAM,GAAA,EAAI,CAAA;AAAA,YACjC,KAAA,CAAM,yBACLD,eAAA,CAAAG,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,8BACDF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAU,gBAAM,MAAA,EAAO;AAAA,aAAA,EACzC,CAAA,GACE;AAAA,WAAA,EACN;AAAA,SAAA,EACF,CAAA;AAAA,wBACAD,eAAA;AAAA,UAACI,uBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAM,eAAA;AAAA,YACN,OAAA,EAAS,UAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACV,YAAA,EAAW,oBAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,iBAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,cACjD,YAAY,eAAA,GAAa;AAAA;AAAA;AAAA;AAC5B;AAAA;AAAA,GACF;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/platform/impersonation/impersonation-banner.tsx"],"names":["useImpersonation","useState","jsxs","jsx","EyeIcon","Fragment","Button","XMarkIcon"],"mappings":";;;;;;;;AAoBO,SAAS,mBAAA,CAAoB,EAAE,MAAA,EAAQ,SAAA,EAAU,EAA6B;AACnF,EAAA,MAAM,EAAE,eAAA,EAAiB,KAAA,EAAO,IAAA,KAASA,iCAAA,EAAiB;AAC1D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAS,KAAK,CAAA;AAEhD,EAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,KAAA,EAAO,OAAO,IAAA;AAEvC,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,EAAK;AACX,MAAA,MAAA,IAAS;AAAA,IACX,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EACE,kJAEC,SAAA,IAAa,EAAA,CAAA;AAAA,MAGhB,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACC,eAAA,EAAA,EAAQ,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,0CACxD,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,YAAA,8DAAA;AAAA,YACoD,GAAA;AAAA,4BACxDD,cAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,IAAS,MAAM,GAAA,EAAI,CAAA;AAAA,YACjC,KAAA,CAAM,yBACLD,eAAA,CAAAG,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,8BACDF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAU,gBAAM,MAAA,EAAO;AAAA,aAAA,EACzC,CAAA,GACE;AAAA,WAAA,EACN;AAAA,SAAA,EACF,CAAA;AAAA,wBACAD,eAAA;AAAA,UAACI,uBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAM,eAAA;AAAA,YACN,OAAA,EAAS,UAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YACV,YAAA,EAAW,oBAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAACI,iBAAA,EAAA,EAAU,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,cACjD,YAAY,eAAA,GAAa;AAAA;AAAA;AAAA;AAC5B;AAAA;AAAA,GACF;AAEJ","file":"chunk-VI4IUTMX.js","sourcesContent":["import { useState } from 'react'\nimport { useImpersonation } from '../../_auth'\nimport { Button } from '@ui/index'\nimport { EyeIcon, XMarkIcon } from '@heroicons/react/24/outline'\n\nexport interface ImpersonationBannerProps {\n /**\n * Callback fired after the impersonation session ends (after the admin\n * token is restored). Useful for refreshing the UI or navigating home.\n */\n onExit?: () => void\n /** Optional extra classes on the outer bar. */\n className?: string\n}\n\n/**\n * Persistent banner shown while the current session is an impersonation\n * session. Shows the admin's identity + target, and an Exit button that\n * terminates the session. Invisible when not impersonating.\n */\nexport function ImpersonationBanner({ onExit, className }: ImpersonationBannerProps) {\n const { isImpersonating, claim, exit } = useImpersonation()\n const [isExiting, setIsExiting] = useState(false)\n\n if (!isImpersonating || !claim) return null\n\n const handleExit = async () => {\n setIsExiting(true)\n try {\n await exit()\n onExit?.()\n } finally {\n setIsExiting(false)\n }\n }\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={\n 'sticky top-0 z-50 flex items-center justify-between gap-3 border-b border-amber-300 ' +\n 'bg-amber-100 px-4 py-2 text-sm text-amber-900 shadow-sm ' +\n (className ?? '')\n }\n >\n <div className=\"flex items-center gap-2\">\n <EyeIcon aria-hidden=\"true\" className=\"h-5 w-5 shrink-0\" />\n <span>\n Impersonating session — signed in as the target user by{' '}\n <strong>{claim.email ?? claim.sub}</strong>\n {claim.reason ? (\n <>\n {' · '}\n <span className=\"italic\">{claim.reason}</span>\n </>\n ) : null}\n </span>\n </div>\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={handleExit}\n disabled={isExiting}\n aria-label=\"Exit impersonation\"\n >\n <XMarkIcon aria-hidden=\"true\" className=\"h-4 w-4\" />\n {isExiting ? 'Exiting…' : 'Exit impersonation'}\n </Button>\n </div>\n )\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { Workspace } from './chunk-
|
|
3
|
-
import { HeroSection, CreateActionButton, SearchBar, FormSection, ChipPicker, EntityCard, InlineForm, FormSelect, GlassModal, FormGrid, FormInput } from './chunk-
|
|
4
|
-
import { useLocale } from './chunk-
|
|
2
|
+
import { Workspace } from './chunk-UXHJS2SH.mjs';
|
|
3
|
+
import { HeroSection, CreateActionButton, SearchBar, FormSection, ChipPicker, EntityCard, InlineForm, FormSelect, GlassModal, FormGrid, FormInput } from './chunk-MSKKNPRE.mjs';
|
|
4
|
+
import { useLocale } from './chunk-ZEFNBGYI.mjs';
|
|
5
5
|
import { Button, Badge } from './chunk-WR55H7DH.mjs';
|
|
6
6
|
import { useState, useMemo } from 'react';
|
|
7
7
|
import { UserGroupIcon, ShieldCheckIcon } from '@heroicons/react/24/outline';
|
|
@@ -308,5 +308,5 @@ function WorkflowWorkspace({ graph }) {
|
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
export { RolesPageView, UsersPageView, WorkflowWorkspace };
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
312
|
-
//# sourceMappingURL=chunk-
|
|
311
|
+
//# sourceMappingURL=chunk-VIB42VMZ.mjs.map
|
|
312
|
+
//# sourceMappingURL=chunk-VIB42VMZ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/pages/users-page-view.tsx","../src/platform/pages/roles-page-view.tsx","../src/platform/workflow-workspace.tsx"],"names":["useState","jsxs","jsx"],"mappings":"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","file":"chunk-4D23CQZM.mjs","sourcesContent":["import { useMemo, useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n ChipPicker,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSection,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\n SearchBar,\n type ActiveFilter,\n} from '@ui/index'\nimport type { UserRole, ManagedUser, UsersPageViewProps } from '@datatechsolutions/shared-domain/common'\n\nconst ROLE_OPTIONS: Array<{ value: UserRole; label: string }> = [\n { value: 'admin', label: 'Admin' },\n { value: 'manager', label: 'Manager' },\n { value: 'analyst', label: 'Analyst' },\n { value: 'viewer', label: 'Viewer' },\n]\n\nexport function UsersPageView({ labels, users, onCreateUser, onUpdateRole }: UsersPageViewProps) {\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const [filtersOpen, setFiltersOpen] = useState(false)\n const [selectedRoles, setSelectedRoles] = useState<string[]>([])\n const [activeFilter, setActiveFilter] = useState<'all' | 'active' | 'inactive'>('all')\n\n // `UsersPageViewProps` lives in shared-domain and doesn't yet declare the\n // new optional filter labels. Cast locally instead of mutating the shared\n // type — frontends pass extra keys as PT-BR strings and we fall back to\n // sensible defaults when omitted.\n const labelsAny = labels as Record<string, string | undefined>\n\n const isEmpty = users.length === 0\n\n const filteredUsers = useMemo(() => {\n const term = searchTerm.trim().toLowerCase()\n return users.filter((user) => {\n if (term && !user.name.toLowerCase().includes(term) && !user.email.toLowerCase().includes(term)) return false\n if (selectedRoles.length > 0 && !selectedRoles.includes(user.role)) return false\n if (activeFilter === 'active' && !user.active) return false\n if (activeFilter === 'inactive' && user.active) return false\n return true\n })\n }, [users, searchTerm, selectedRoles, activeFilter])\n\n const roleChipItems = useMemo(\n () => ROLE_OPTIONS.map((opt) => ({\n id: opt.value,\n name: opt.label,\n style: { bg: 'bg-violet-500/15 text-violet-700 dark:text-violet-300', text: '' },\n })),\n [],\n )\n\n const activeLabelFor = (value: 'all' | 'active' | 'inactive'): string => {\n if (value === 'active') return labelsAny.statusActive ?? labels.statusActive\n if (value === 'inactive') return labelsAny.statusInactive ?? labels.statusInactive\n return labelsAny.statusAll ?? 'Todos'\n }\n\n const activeFilters = useMemo<ActiveFilter[]>(() => {\n const chips: ActiveFilter[] = []\n for (const value of selectedRoles) {\n chips.push({ type: 'role', value, label: roleChipItems.find((i) => i.id === value)?.name ?? value })\n }\n if (activeFilter !== 'all') {\n chips.push({ type: 'active', value: activeFilter, label: activeLabelFor(activeFilter) })\n }\n return chips\n }, [selectedRoles, activeFilter, roleChipItems])\n\n const filterCount = activeFilters.length\n\n const removeFilter = (filter: ActiveFilter) => {\n if (filter.type === 'role') setSelectedRoles((prev) => prev.filter((v) => v !== filter.value))\n if (filter.type === 'active') setActiveFilter('all')\n }\n\n const clearAllFilters = () => {\n setSelectedRoles([])\n setActiveFilter('all')\n }\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<UserGroupIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-600\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n noBorder\n activeFilters={activeFilters}\n onRemoveFilter={removeFilter}\n onClearAll={filterCount > 0 ? clearAllFilters : undefined}\n filtersModal={{\n open: filtersOpen,\n onOpen: () => setFiltersOpen(true),\n onClose: () => setFiltersOpen(false),\n title: labelsAny.filtersTitle ?? 'Filtros',\n count: filterCount,\n onClear: filterCount > 0 ? clearAllFilters : undefined,\n children: (\n <div className=\"space-y-5\">\n <FormSection title={labelsAny.filterByRole ?? labels.role}>\n <ChipPicker\n items={roleChipItems}\n selectedIds={selectedRoles}\n onChange={setSelectedRoles}\n selectedLabel={labelsAny.selected ?? 'selecionados'}\n selectAllLabel={labelsAny.selectAll ?? 'Selecionar todos'}\n clearLabel={labelsAny.clear ?? 'Limpar'}\n />\n </FormSection>\n\n <FormSection title={labelsAny.filterByStatus ?? labels.status}>\n <div className=\"flex flex-wrap gap-2\">\n {(['all', 'active', 'inactive'] as const).map((value) => (\n activeFilter === value\n ? <Button key={value} type=\"button\" size=\"sm\" color=\"ios-glass-blue\" onClick={() => setActiveFilter(value)}>{activeLabelFor(value)}</Button>\n : <Button key={value} type=\"button\" size=\"sm\" outline onClick={() => setActiveFilter(value)}>{activeLabelFor(value)}</Button>\n ))}\n </div>\n </FormSection>\n </div>\n ),\n }}\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.list}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user: ManagedUser) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <UserGroupIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${\n user.active\n ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300'\n : 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300'\n }`}\n >\n {user.active ? labels.statusActive : labels.statusInactive}\n </span>\n )}\n footer={(\n <form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n onUpdateRole({ email: user.email, role })\n }}\n >\n <InlineForm>\n <FormSelect name=\"role\" options={ROLE_OPTIONS} defaultValue={user.role} />\n <Button type=\"submit\" outline size=\"sm\">{labels.save}</Button>\n </InlineForm>\n </form>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.create}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.list}\n submitLabel={labels.add}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!name || !email) return\n onCreateUser({ name, email, role })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.userNamePlaceholder} required />\n <FormInput name=\"email\" label={labels.email} placeholder={labels.userEmailPlaceholder} required type=\"email\" />\n <FormSelect name=\"role\" label={labels.role} options={ROLE_OPTIONS} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { useState, type FormEvent } from 'react'\nimport { ShieldCheckIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n SearchBar,\n} from '@ui/index'\nimport type { UserRole, RolesPageViewProps } from '@datatechsolutions/shared-domain/common'\nimport type { PlatformRoleDefinition } from '../rbac'\n\nexport type RolesPageViewExtraProps = {\n /**\n * App-defined role definitions, e.g. `{ admin: { id, label, description }, ... }`.\n * Each app passes the output of its own `createPlatformRbac()` call.\n */\n roleDefinitions: Record<string, PlatformRoleDefinition<string>>\n /**\n * Display options surfaced in the role-assignment modal select. Each\n * entry is `{ value: roleId, label: localizedLabel }`.\n */\n roleOptions: Array<{ value: string; label: string }>\n}\n\nexport function RolesPageView({\n labels,\n users,\n onAssignRole,\n roleDefinitions,\n roleOptions,\n}: RolesPageViewProps & RolesPageViewExtraProps) {\n const [assignOpen, setAssignOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allRoleDefinitions = Object.values(roleDefinitions)\n const allUsers = users\n const term = searchTerm.trim().toLowerCase()\n const filteredRoleDefinitions = term\n ? allRoleDefinitions.filter((role) => role.label.toLowerCase().includes(term))\n : allRoleDefinitions\n const filteredUsers = term\n ? allUsers.filter((user) =>\n user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term),\n )\n : allUsers\n const isEmpty = allRoleDefinitions.length === 0 && allUsers.length === 0\n const labelsAny = labels as Record<string, string>\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<ShieldCheckIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-600\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.definitions}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredRoleDefinitions.map((role) => (\n <EntityCard\n key={role.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={role.label}\n subtitle={role.id}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{role.description}</p>\n <p className=\"mt-2 text-xs font-medium text-slate-600 dark:text-slate-300\">\n {labels.permissionsEnabled}\n </p>\n </EntityCard>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.current}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <Badge color=\"violet\" size=\"xs\">{user.role}</Badge>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={assignOpen}\n onClose={() => setAssignOpen(false)}\n title={labels.assign}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.current}\n submitLabel={labels.apply}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!email) return\n onAssignRole({ email, role })\n setAssignOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"email\" label={labels.userEmail} placeholder=\"user@company.com\" required />\n <FormSelect name=\"role\" label={labels.role} options={roleOptions} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe/contracts'\nimport type { WorkflowWorkspaceProps } from '@datatechsolutions/shared-domain/common'\nimport { useLocale } from '@ui/lib/i18n-context'\n\n/**\n * Thin wrapper that forwards a workflow graph into the visual canvas while\n * threading the active locale from the i18n context. The graph type from\n * `shared-domain` is structurally identical to ui's contract type — the\n * cast keeps callers from having to import both.\n */\nexport function WorkflowWorkspace({ graph }: WorkflowWorkspaceProps) {\n const locale = useLocale()\n return <Workspace initialGraph={graph as unknown as UiWorkflowGraph} locale={locale} />\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/platform/pages/users-page-view.tsx","../src/platform/pages/roles-page-view.tsx","../src/platform/workflow-workspace.tsx"],"names":["useState","jsxs","jsx"],"mappings":"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","file":"chunk-VIB42VMZ.mjs","sourcesContent":["import { useMemo, useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n ChipPicker,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n FormSection,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\n SearchBar,\n type ActiveFilter,\n} from '@ui/index'\nimport type { UserRole, ManagedUser, UsersPageViewProps } from '@datatechsolutions/shared-domain/common'\n\nconst ROLE_OPTIONS: Array<{ value: UserRole; label: string }> = [\n { value: 'admin', label: 'Admin' },\n { value: 'manager', label: 'Manager' },\n { value: 'analyst', label: 'Analyst' },\n { value: 'viewer', label: 'Viewer' },\n]\n\nexport function UsersPageView({ labels, users, onCreateUser, onUpdateRole }: UsersPageViewProps) {\n const [createOpen, setCreateOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const [filtersOpen, setFiltersOpen] = useState(false)\n const [selectedRoles, setSelectedRoles] = useState<string[]>([])\n const [activeFilter, setActiveFilter] = useState<'all' | 'active' | 'inactive'>('all')\n\n // `UsersPageViewProps` lives in shared-domain and doesn't yet declare the\n // new optional filter labels. Cast locally instead of mutating the shared\n // type — frontends pass extra keys as PT-BR strings and we fall back to\n // sensible defaults when omitted.\n const labelsAny = labels as Record<string, string | undefined>\n\n const isEmpty = users.length === 0\n\n const filteredUsers = useMemo(() => {\n const term = searchTerm.trim().toLowerCase()\n return users.filter((user) => {\n if (term && !user.name.toLowerCase().includes(term) && !user.email.toLowerCase().includes(term)) return false\n if (selectedRoles.length > 0 && !selectedRoles.includes(user.role)) return false\n if (activeFilter === 'active' && !user.active) return false\n if (activeFilter === 'inactive' && user.active) return false\n return true\n })\n }, [users, searchTerm, selectedRoles, activeFilter])\n\n const roleChipItems = useMemo(\n () => ROLE_OPTIONS.map((opt) => ({\n id: opt.value,\n name: opt.label,\n style: { bg: 'bg-violet-500/15 text-violet-700 dark:text-violet-300', text: '' },\n })),\n [],\n )\n\n const activeLabelFor = (value: 'all' | 'active' | 'inactive'): string => {\n if (value === 'active') return labelsAny.statusActive ?? labels.statusActive\n if (value === 'inactive') return labelsAny.statusInactive ?? labels.statusInactive\n return labelsAny.statusAll ?? 'Todos'\n }\n\n const activeFilters = useMemo<ActiveFilter[]>(() => {\n const chips: ActiveFilter[] = []\n for (const value of selectedRoles) {\n chips.push({ type: 'role', value, label: roleChipItems.find((i) => i.id === value)?.name ?? value })\n }\n if (activeFilter !== 'all') {\n chips.push({ type: 'active', value: activeFilter, label: activeLabelFor(activeFilter) })\n }\n return chips\n }, [selectedRoles, activeFilter, roleChipItems])\n\n const filterCount = activeFilters.length\n\n const removeFilter = (filter: ActiveFilter) => {\n if (filter.type === 'role') setSelectedRoles((prev) => prev.filter((v) => v !== filter.value))\n if (filter.type === 'active') setActiveFilter('all')\n }\n\n const clearAllFilters = () => {\n setSelectedRoles([])\n setActiveFilter('all')\n }\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<UserGroupIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-violet-500 to-indigo-600\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n noBorder\n activeFilters={activeFilters}\n onRemoveFilter={removeFilter}\n onClearAll={filterCount > 0 ? clearAllFilters : undefined}\n filtersModal={{\n open: filtersOpen,\n onOpen: () => setFiltersOpen(true),\n onClose: () => setFiltersOpen(false),\n title: labelsAny.filtersTitle ?? 'Filtros',\n count: filterCount,\n onClear: filterCount > 0 ? clearAllFilters : undefined,\n children: (\n <div className=\"space-y-5\">\n <FormSection title={labelsAny.filterByRole ?? labels.role}>\n <ChipPicker\n items={roleChipItems}\n selectedIds={selectedRoles}\n onChange={setSelectedRoles}\n selectedLabel={labelsAny.selected ?? 'selecionados'}\n selectAllLabel={labelsAny.selectAll ?? 'Selecionar todos'}\n clearLabel={labelsAny.clear ?? 'Limpar'}\n />\n </FormSection>\n\n <FormSection title={labelsAny.filterByStatus ?? labels.status}>\n <div className=\"flex flex-wrap gap-2\">\n {(['all', 'active', 'inactive'] as const).map((value) => (\n activeFilter === value\n ? <Button key={value} type=\"button\" size=\"sm\" color=\"ios-glass-blue\" onClick={() => setActiveFilter(value)}>{activeLabelFor(value)}</Button>\n : <Button key={value} type=\"button\" size=\"sm\" outline onClick={() => setActiveFilter(value)}>{activeLabelFor(value)}</Button>\n ))}\n </div>\n </FormSection>\n </div>\n ),\n }}\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.create}\n onClick={() => setCreateOpen(true)}\n accent=\"violet\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.list}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user: ManagedUser) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <UserGroupIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold ${\n user.active\n ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300'\n : 'bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300'\n }`}\n >\n {user.active ? labels.statusActive : labels.statusInactive}\n </span>\n )}\n footer={(\n <form\n onSubmit={(event) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n onUpdateRole({ email: user.email, role })\n }}\n >\n <InlineForm>\n <FormSelect name=\"role\" options={ROLE_OPTIONS} defaultValue={user.role} />\n <Button type=\"submit\" outline size=\"sm\">{labels.save}</Button>\n </InlineForm>\n </form>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={createOpen}\n onClose={() => setCreateOpen(false)}\n title={labels.create}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.list}\n submitLabel={labels.add}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const name = String(formData.get('name') ?? '').trim()\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!name || !email) return\n onCreateUser({ name, email, role })\n setCreateOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"name\" label={labels.name} placeholder={labels.userNamePlaceholder} required />\n <FormInput name=\"email\" label={labels.email} placeholder={labels.userEmailPlaceholder} required type=\"email\" />\n <FormSelect name=\"role\" label={labels.role} options={ROLE_OPTIONS} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { useState, type FormEvent } from 'react'\nimport { ShieldCheckIcon } from '@heroicons/react/24/outline'\nimport {\n Badge,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n SearchBar,\n} from '@ui/index'\nimport type { UserRole, RolesPageViewProps } from '@datatechsolutions/shared-domain/common'\nimport type { PlatformRoleDefinition } from '../rbac'\n\nexport type RolesPageViewExtraProps = {\n /**\n * App-defined role definitions, e.g. `{ admin: { id, label, description }, ... }`.\n * Each app passes the output of its own `createPlatformRbac()` call.\n */\n roleDefinitions: Record<string, PlatformRoleDefinition<string>>\n /**\n * Display options surfaced in the role-assignment modal select. Each\n * entry is `{ value: roleId, label: localizedLabel }`.\n */\n roleOptions: Array<{ value: string; label: string }>\n}\n\nexport function RolesPageView({\n labels,\n users,\n onAssignRole,\n roleDefinitions,\n roleOptions,\n}: RolesPageViewProps & RolesPageViewExtraProps) {\n const [assignOpen, setAssignOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n\n const allRoleDefinitions = Object.values(roleDefinitions)\n const allUsers = users\n const term = searchTerm.trim().toLowerCase()\n const filteredRoleDefinitions = term\n ? allRoleDefinitions.filter((role) => role.label.toLowerCase().includes(term))\n : allRoleDefinitions\n const filteredUsers = term\n ? allUsers.filter((user) =>\n user.name.toLowerCase().includes(term) || user.email.toLowerCase().includes(term),\n )\n : allUsers\n const isEmpty = allRoleDefinitions.length === 0 && allUsers.length === 0\n const labelsAny = labels as Record<string, string>\n\n return (\n <div className=\"space-y-4\">\n <HeroSection\n icon={<ShieldCheckIcon className=\"h-5 w-5\" />}\n label={labels.title}\n title={labels.title}\n subtitle={labels.subtitle}\n gradient=\"from-emerald-500 to-teal-600\"\n toolbar={!isEmpty ? (\n <SearchBar\n searchTerm={searchTerm}\n onSearchChange={setSearchTerm}\n placeholder={labelsAny.searchPlaceholder ?? labels.title}\n noBorder\n />\n ) : undefined}\n actions={(\n <CreateActionButton\n mode=\"desktop\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n )}\n />\n\n <CreateActionButton\n mode=\"mobile\"\n label={labels.assign}\n onClick={() => setAssignOpen(true)}\n accent=\"emerald\"\n />\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.definitions}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {filteredRoleDefinitions.map((role) => (\n <EntityCard\n key={role.id}\n accentGradient=\"from-emerald-500 to-teal-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={role.label}\n subtitle={role.id}\n >\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{role.description}</p>\n <p className=\"mt-2 text-xs font-medium text-slate-600 dark:text-slate-300\">\n {labels.permissionsEnabled}\n </p>\n </EntityCard>\n ))}\n </div>\n </section>\n\n <section className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-slate-900 dark:text-slate-100\">{labels.current}</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredUsers.map((user) => (\n <EntityCard\n key={user.email}\n accentGradient=\"from-violet-500 to-indigo-700\"\n icon={(\n <div className=\"flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400\">\n <ShieldCheckIcon className=\"h-6 w-6\" />\n </div>\n )}\n title={user.name}\n subtitle={user.email}\n status={(\n <Badge color=\"violet\" size=\"xs\">{user.role}</Badge>\n )}\n />\n ))}\n </div>\n </section>\n\n <GlassModal\n open={assignOpen}\n onClose={() => setAssignOpen(false)}\n title={labels.assign}\n maxWidth=\"lg\"\n showFormFooter\n cancelLabel={labels.current}\n submitLabel={labels.apply}\n onSubmit={(event: FormEvent) => {\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const email = String(formData.get('email') ?? '').trim().toLowerCase()\n const role = String(formData.get('role') ?? 'viewer') as UserRole\n if (!email) return\n onAssignRole({ email, role })\n setAssignOpen(false)\n }}\n >\n <FormGrid>\n <FormInput name=\"email\" label={labels.userEmail} placeholder=\"user@company.com\" required />\n <FormSelect name=\"role\" label={labels.role} options={roleOptions} />\n </FormGrid>\n </GlassModal>\n </div>\n )\n}\n","import { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe/contracts'\nimport type { WorkflowWorkspaceProps } from '@datatechsolutions/shared-domain/common'\nimport { useLocale } from '@ui/lib/i18n-context'\n\n/**\n * Thin wrapper that forwards a workflow graph into the visual canvas while\n * threading the active locale from the i18n context. The graph type from\n * `shared-domain` is structurally identical to ui's contract type — the\n * cast keeps callers from having to import both.\n */\nexport function WorkflowWorkspace({ graph }: WorkflowWorkspaceProps) {\n const locale = useLocale()\n return <Workspace initialGraph={graph as unknown as UiWorkflowGraph} locale={locale} />\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunk5ETT54QS_js = require('./chunk-5ETT54QS.js');
|
|
5
|
+
var chunkY5VN4SPH_js = require('./chunk-Y5VN4SPH.js');
|
|
6
6
|
var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
|
|
7
7
|
var chunkUZ3CMNUJ_js = require('./chunk-UZ3CMNUJ.js');
|
|
8
8
|
var react = require('react');
|
|
@@ -14,7 +14,7 @@ function MembersTabContent({
|
|
|
14
14
|
organizationId,
|
|
15
15
|
client
|
|
16
16
|
}) {
|
|
17
|
-
const t =
|
|
17
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
18
18
|
const [members, setMembers] = react.useState([]);
|
|
19
19
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
20
20
|
const [removingId, setRemovingId] = react.useState(null);
|
|
@@ -62,13 +62,13 @@ function MembersTabContent({
|
|
|
62
62
|
};
|
|
63
63
|
if (isLoading) {
|
|
64
64
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400", children: [
|
|
65
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
65
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.InlineSpinner, {}),
|
|
66
66
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.members.loading") })
|
|
67
67
|
] });
|
|
68
68
|
}
|
|
69
69
|
if (members.length === 0) {
|
|
70
70
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
-
|
|
71
|
+
chunk5ETT54QS_js.EmptyState,
|
|
72
72
|
{
|
|
73
73
|
message: t("admin.organizationDetail.members.emptyMessage"),
|
|
74
74
|
description: t("admin.organizationDetail.members.emptyDescription"),
|
|
@@ -78,11 +78,11 @@ function MembersTabContent({
|
|
|
78
78
|
);
|
|
79
79
|
}
|
|
80
80
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
-
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.ListCard, { children: members.map((member) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
+
chunk5ETT54QS_js.ListCardItem,
|
|
83
83
|
{
|
|
84
84
|
leading: /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
-
|
|
85
|
+
chunk5ETT54QS_js.Avatar,
|
|
86
86
|
{
|
|
87
87
|
src: member.image,
|
|
88
88
|
initials: (member.name ?? member.email).slice(0, 2).toUpperCase(),
|
|
@@ -111,7 +111,7 @@ function MembersTabContent({
|
|
|
111
111
|
member.id
|
|
112
112
|
)) }),
|
|
113
113
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
-
|
|
114
|
+
chunk5ETT54QS_js.DynamicIslandConfirm,
|
|
115
115
|
{
|
|
116
116
|
open: removeTarget !== null,
|
|
117
117
|
onClose: handleRemoveCancel,
|
|
@@ -129,8 +129,8 @@ function InvitationsTabContent({
|
|
|
129
129
|
organizationId,
|
|
130
130
|
client
|
|
131
131
|
}) {
|
|
132
|
-
const t =
|
|
133
|
-
const format =
|
|
132
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
133
|
+
const format = chunkY5VN4SPH_js.useFormatter();
|
|
134
134
|
const [invitations, setInvitations] = react.useState([]);
|
|
135
135
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
136
136
|
const [isInviteSheetOpen, setIsInviteSheetOpen] = react.useState(false);
|
|
@@ -196,7 +196,7 @@ function InvitationsTabContent({
|
|
|
196
196
|
const roleOptions = ["viewer", "member", "admin", "owner"];
|
|
197
197
|
if (isLoading) {
|
|
198
198
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400", children: [
|
|
199
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.InlineSpinner, {}),
|
|
200
200
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.invitations.loading") })
|
|
201
201
|
] });
|
|
202
202
|
}
|
|
@@ -215,15 +215,15 @@ function InvitationsTabContent({
|
|
|
215
215
|
}
|
|
216
216
|
),
|
|
217
217
|
invitations.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
218
|
-
|
|
218
|
+
chunk5ETT54QS_js.EmptyState,
|
|
219
219
|
{
|
|
220
220
|
message: t("admin.organizationDetail.invitations.emptyMessage"),
|
|
221
221
|
description: t("admin.organizationDetail.invitations.emptyDescription"),
|
|
222
222
|
icon: outline.EnvelopeIcon,
|
|
223
223
|
variant: "card"
|
|
224
224
|
}
|
|
225
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
-
|
|
225
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.ListCard, { children: invitations.map((invitation) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
+
chunk5ETT54QS_js.ListCardItem,
|
|
227
227
|
{
|
|
228
228
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.EnvelopeIcon, { className: "h-5 w-5 text-white" }) }),
|
|
229
229
|
trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Badge, { color: statusBadgeColor(invitation.status), children: invitation.status }),
|
|
@@ -243,7 +243,7 @@ function InvitationsTabContent({
|
|
|
243
243
|
)) })
|
|
244
244
|
] }),
|
|
245
245
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
-
|
|
246
|
+
chunk5ETT54QS_js.Sheet,
|
|
247
247
|
{
|
|
248
248
|
open: isInviteSheetOpen,
|
|
249
249
|
onClose: handleCloseInviteSheet,
|
|
@@ -252,7 +252,7 @@ function InvitationsTabContent({
|
|
|
252
252
|
size: "md",
|
|
253
253
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
254
254
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
-
|
|
255
|
+
chunk5ETT54QS_js.Input,
|
|
256
256
|
{
|
|
257
257
|
label: t("admin.organizationDetail.invitations.emailLabel"),
|
|
258
258
|
type: "email",
|
|
@@ -300,7 +300,7 @@ function DomainsTabContent({
|
|
|
300
300
|
organizationId,
|
|
301
301
|
client
|
|
302
302
|
}) {
|
|
303
|
-
const t =
|
|
303
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
304
304
|
const [domains, setDomains] = react.useState([]);
|
|
305
305
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
306
306
|
const [isAddSheetOpen, setIsAddSheetOpen] = react.useState(false);
|
|
@@ -367,7 +367,7 @@ function DomainsTabContent({
|
|
|
367
367
|
}, [client, organizationId, fetchDomains]);
|
|
368
368
|
if (isLoading) {
|
|
369
369
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400", children: [
|
|
370
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
370
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.InlineSpinner, {}),
|
|
371
371
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.domains.loading") })
|
|
372
372
|
] });
|
|
373
373
|
}
|
|
@@ -386,15 +386,15 @@ function DomainsTabContent({
|
|
|
386
386
|
}
|
|
387
387
|
),
|
|
388
388
|
domains.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
-
|
|
389
|
+
chunk5ETT54QS_js.EmptyState,
|
|
390
390
|
{
|
|
391
391
|
message: t("admin.organizationDetail.domains.emptyMessage"),
|
|
392
392
|
description: t("admin.organizationDetail.domains.emptyDescription"),
|
|
393
393
|
icon: outline.GlobeAltIcon,
|
|
394
394
|
variant: "card"
|
|
395
395
|
}
|
|
396
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
397
|
-
|
|
396
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.ListCard, { children: domains.map((domain) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
397
|
+
chunk5ETT54QS_js.ListCardItem,
|
|
398
398
|
{
|
|
399
399
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-9 w-9 items-center justify-center rounded-xl shadow-sm ${domain.verified ? "bg-gradient-to-br from-emerald-500 to-green-600" : "bg-gradient-to-br from-amber-500 to-orange-600"}`, children: domain.verified ? /* @__PURE__ */ jsxRuntime.jsx(outline.CheckCircleIcon, { className: "h-5 w-5 text-white" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.GlobeAltIcon, { className: "h-5 w-5 text-white" }) }),
|
|
400
400
|
trailing: !domain.verified ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -410,7 +410,7 @@ function DomainsTabContent({
|
|
|
410
410
|
t("admin.organizationDetail.domains.verifyButton")
|
|
411
411
|
]
|
|
412
412
|
}
|
|
413
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
413
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.StatusBadge, { status: "active", label: t("admin.organizationDetail.domains.verifiedLabel"), size: "sm" }),
|
|
414
414
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
415
415
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-gray-900 dark:text-white", children: domain.domain }),
|
|
416
416
|
domain.autoJoinEnabled && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: t("admin.organizationDetail.domains.autoJoinEnabled") })
|
|
@@ -420,7 +420,7 @@ function DomainsTabContent({
|
|
|
420
420
|
)) })
|
|
421
421
|
] }),
|
|
422
422
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
423
|
-
|
|
423
|
+
chunk5ETT54QS_js.Sheet,
|
|
424
424
|
{
|
|
425
425
|
open: isAddSheetOpen,
|
|
426
426
|
onClose: handleCloseAddSheet,
|
|
@@ -429,7 +429,7 @@ function DomainsTabContent({
|
|
|
429
429
|
size: "md",
|
|
430
430
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
431
431
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
432
|
-
|
|
432
|
+
chunk5ETT54QS_js.Input,
|
|
433
433
|
{
|
|
434
434
|
label: t("admin.organizationDetail.domains.domainLabel"),
|
|
435
435
|
value: newDomain,
|
|
@@ -460,14 +460,14 @@ function AdminOrganizationDetail({
|
|
|
460
460
|
organization,
|
|
461
461
|
client
|
|
462
462
|
}) {
|
|
463
|
-
const t =
|
|
463
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
464
464
|
const [activeTab, setActiveTab] = react.useState("members");
|
|
465
465
|
const segments = ALL_TABS.map((tab) => ({
|
|
466
466
|
value: tab,
|
|
467
467
|
label: t(`admin.organizationDetail.tabs.${tab}`)
|
|
468
468
|
}));
|
|
469
469
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
470
|
-
|
|
470
|
+
chunk5ETT54QS_js.SectionCard,
|
|
471
471
|
{
|
|
472
472
|
header: {
|
|
473
473
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UsersIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -475,7 +475,7 @@ function AdminOrganizationDetail({
|
|
|
475
475
|
subtitle: organization.description ?? t("admin.organizationDetail.defaultSubtitle"),
|
|
476
476
|
gradient: "from-emerald-500 via-teal-500 to-cyan-500",
|
|
477
477
|
rightContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
478
|
-
|
|
478
|
+
chunk5ETT54QS_js.StatusBadge,
|
|
479
479
|
{
|
|
480
480
|
status: organization.enabled ? "active" : "inactive",
|
|
481
481
|
label: organization.enabled ? t("admin.organizationDetail.statusEnabled") : t("admin.organizationDetail.statusDisabled"),
|
|
@@ -485,7 +485,7 @@ function AdminOrganizationDetail({
|
|
|
485
485
|
},
|
|
486
486
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
487
487
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
488
|
-
|
|
488
|
+
chunk5ETT54QS_js.SegmentedControl,
|
|
489
489
|
{
|
|
490
490
|
segments,
|
|
491
491
|
value: activeTab,
|
|
@@ -502,5 +502,5 @@ function AdminOrganizationDetail({
|
|
|
502
502
|
}
|
|
503
503
|
|
|
504
504
|
exports.AdminOrganizationDetail = AdminOrganizationDetail;
|
|
505
|
-
//# sourceMappingURL=chunk-
|
|
506
|
-
//# sourceMappingURL=chunk-
|
|
505
|
+
//# sourceMappingURL=chunk-WOTKBKS6.js.map
|
|
506
|
+
//# sourceMappingURL=chunk-WOTKBKS6.js.map
|