@datatechsolutions/ui 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/astrlabe/contracts.d.mts +31 -3
  2. package/dist/astrlabe/contracts.d.ts +31 -3
  3. package/dist/astrlabe/index.js +115 -115
  4. package/dist/astrlabe/index.mjs +4 -4
  5. package/dist/astrlabe/utils.js +9 -9
  6. package/dist/astrlabe/utils.mjs +2 -2
  7. package/dist/astrlabe/workflow-canvas.js +3 -3
  8. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  9. package/dist/{chunk-QYA53LUF.mjs → chunk-2WXRRQM3.mjs} +21 -4
  10. package/dist/chunk-2WXRRQM3.mjs.map +1 -0
  11. package/dist/{chunk-C3H4FM4A.js → chunk-72SWXOD5.js} +15 -2
  12. package/dist/chunk-72SWXOD5.js.map +1 -0
  13. package/dist/{chunk-H2D2CRTD.mjs → chunk-BR2GAZKG.mjs} +5 -5
  14. package/dist/{chunk-H2D2CRTD.mjs.map → chunk-BR2GAZKG.mjs.map} +1 -1
  15. package/dist/{chunk-NJS2YC3J.js → chunk-DJDZIRM6.js} +12 -2
  16. package/dist/chunk-DJDZIRM6.js.map +1 -0
  17. package/dist/{chunk-5W7L7BT7.mjs → chunk-G7JQ4OCE.mjs} +15 -2
  18. package/dist/chunk-G7JQ4OCE.mjs.map +1 -0
  19. package/dist/{chunk-YIB2YAM5.mjs → chunk-GIQXB3BG.mjs} +3 -3
  20. package/dist/{chunk-YIB2YAM5.mjs.map → chunk-GIQXB3BG.mjs.map} +1 -1
  21. package/dist/{chunk-RL35XATZ.js → chunk-IJAKZHXX.js} +82 -65
  22. package/dist/chunk-IJAKZHXX.js.map +1 -0
  23. package/dist/{chunk-U7XM3N7F.mjs → chunk-LEXBTVGM.mjs} +12 -2
  24. package/dist/chunk-LEXBTVGM.mjs.map +1 -0
  25. package/dist/{chunk-SU3YPWFW.js → chunk-MWPTSBAI.js} +4 -4
  26. package/dist/{chunk-SU3YPWFW.js.map → chunk-MWPTSBAI.js.map} +1 -1
  27. package/dist/{chunk-EFOXN3LC.js → chunk-NJFRJ6YD.js} +279 -19
  28. package/dist/chunk-NJFRJ6YD.js.map +1 -0
  29. package/dist/{chunk-YV72JM4B.mjs → chunk-O6M3KDGT.mjs} +3 -3
  30. package/dist/{chunk-YV72JM4B.mjs.map → chunk-O6M3KDGT.mjs.map} +1 -1
  31. package/dist/{chunk-RGI74SQH.js → chunk-OCELRSLO.js} +4 -4
  32. package/dist/{chunk-RGI74SQH.js.map → chunk-OCELRSLO.js.map} +1 -1
  33. package/dist/{chunk-IRT4T3CU.mjs → chunk-PCYL4MII.mjs} +274 -14
  34. package/dist/chunk-PCYL4MII.mjs.map +1 -0
  35. package/dist/{chunk-Y6AEE56Q.js → chunk-ZL6C2ZAF.js} +29 -29
  36. package/dist/{chunk-Y6AEE56Q.js.map → chunk-ZL6C2ZAF.js.map} +1 -1
  37. package/dist/platform/agents-workspace.js +6 -6
  38. package/dist/platform/agents-workspace.mjs +5 -5
  39. package/dist/platform/index.js +17 -17
  40. package/dist/platform/index.mjs +8 -8
  41. package/dist/platform/pages/index.js +12 -12
  42. package/dist/platform/pages/index.mjs +6 -6
  43. package/dist/platform/telemetry/index.js +9 -0
  44. package/dist/platform/telemetry/index.js.map +1 -1
  45. package/dist/platform/telemetry/index.mjs +9 -0
  46. package/dist/platform/telemetry/index.mjs.map +1 -1
  47. package/dist/platform/workflow-canvas-shell.js +4 -4
  48. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  49. package/package.json +1 -1
  50. package/dist/chunk-5W7L7BT7.mjs.map +0 -1
  51. package/dist/chunk-C3H4FM4A.js.map +0 -1
  52. package/dist/chunk-EFOXN3LC.js.map +0 -1
  53. package/dist/chunk-IRT4T3CU.mjs.map +0 -1
  54. package/dist/chunk-NJS2YC3J.js.map +0 -1
  55. package/dist/chunk-QYA53LUF.mjs.map +0 -1
  56. package/dist/chunk-RL35XATZ.js.map +0 -1
  57. package/dist/chunk-U7XM3N7F.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Workspace } from './chunk-IRT4T3CU.mjs';
2
+ import { Workspace } from './chunk-PCYL4MII.mjs';
3
3
  import { HeroSection, CreateActionButton, EntityCard, InlineForm, FormSelect, Button, GlassModal, FormGrid, FormInput } from './chunk-JN6IL6OH.mjs';
4
4
  import { useLocale } from './chunk-7VJ7CMMT.mjs';
5
5
  import { useState } from 'react';
@@ -206,5 +206,5 @@ function WorkflowWorkspace({ graph }) {
206
206
  }
207
207
 
208
208
  export { RolesPageView, UsersPageView, WorkflowWorkspace };
209
- //# sourceMappingURL=chunk-YV72JM4B.mjs.map
210
- //# sourceMappingURL=chunk-YV72JM4B.mjs.map
209
+ //# sourceMappingURL=chunk-O6M3KDGT.mjs.map
210
+ //# sourceMappingURL=chunk-O6M3KDGT.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-YV72JM4B.mjs","sourcesContent":["import { useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\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\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={(\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 {users.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 CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\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\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={(\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 {Object.values(roleDefinitions).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 {users.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 <span className=\"shrink-0 rounded-full bg-violet-100 px-2 py-0.5 text-[10px] font-semibold text-violet-700 dark:bg-violet-900/30 dark:text-violet-300\">\n {user.role}\n </span>\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-O6M3KDGT.mjs","sourcesContent":["import { useState, type FormEvent } from 'react'\nimport { UserGroupIcon } from '@heroicons/react/24/outline'\nimport {\n Button,\n CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\n InlineForm,\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\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={(\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 {users.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 CreateActionButton,\n EntityCard,\n FormGrid,\n FormInput,\n GlassModal,\n FormSelect,\n HeroSection,\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\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={(\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 {Object.values(roleDefinitions).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 {users.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 <span className=\"shrink-0 rounded-full bg-violet-100 px-2 py-0.5 text-[10px] font-semibold text-violet-700 dark:bg-violet-900/30 dark:text-violet-300\">\n {user.role}\n </span>\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,14 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkEFOXN3LC_js = require('./chunk-EFOXN3LC.js');
4
+ var chunkNJFRJ6YD_js = require('./chunk-NJFRJ6YD.js');
5
5
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
8
8
  function WorkflowCanvasShell({ graph, messages }) {
9
9
  const locale = chunkYXN2K77G_js.useLocale();
10
10
  return /* @__PURE__ */ jsxRuntime.jsx(
11
- chunkEFOXN3LC_js.Workspace,
11
+ chunkNJFRJ6YD_js.Workspace,
12
12
  {
13
13
  initialGraph: graph,
14
14
  locale,
@@ -18,5 +18,5 @@ function WorkflowCanvasShell({ graph, messages }) {
18
18
  }
19
19
 
20
20
  exports.WorkflowCanvasShell = WorkflowCanvasShell;
21
- //# sourceMappingURL=chunk-RGI74SQH.js.map
22
- //# sourceMappingURL=chunk-RGI74SQH.js.map
21
+ //# sourceMappingURL=chunk-OCELRSLO.js.map
22
+ //# sourceMappingURL=chunk-OCELRSLO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":["useLocale","jsx","Workspace"],"mappings":";;;;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAASA,0BAAA,EAAU;AACzB,EAAA,uBACEC,cAAA;AAAA,IAACC,0BAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-RGI74SQH.js","sourcesContent":["import { useLocale } from '@ui/lib/i18n-context'\nimport { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe'\nimport type { WorkflowCanvasShellProps } from '@datatechsolutions/shared-domain/common'\n\n/**\n * Workflow canvas shell with optional message bundle override.\n *\n * Most apps wrap their tree in `<I18nProvider>` and let the canvas read\n * messages from context — in that case `messages` can be omitted. Apps\n * that need to inject a precomputed bundle (e.g. for tests or app-specific\n * overrides not shipped with shared-domain) can pass it explicitly.\n */\ntype Props = WorkflowCanvasShellProps & {\n /** Optional override for the messages catalog passed into the canvas. */\n messages?: Record<string, unknown>\n}\n\nexport function WorkflowCanvasShell({ graph, messages }: Props) {\n const locale = useLocale()\n return (\n <Workspace\n initialGraph={graph as unknown as UiWorkflowGraph}\n locale={locale}\n {...(messages ? { messages } : {})}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":["useLocale","jsx","Workspace"],"mappings":";;;;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAASA,0BAAA,EAAU;AACzB,EAAA,uBACEC,cAAA;AAAA,IAACC,0BAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-OCELRSLO.js","sourcesContent":["import { useLocale } from '@ui/lib/i18n-context'\nimport { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe'\nimport type { WorkflowCanvasShellProps } from '@datatechsolutions/shared-domain/common'\n\n/**\n * Workflow canvas shell with optional message bundle override.\n *\n * Most apps wrap their tree in `<I18nProvider>` and let the canvas read\n * messages from context — in that case `messages` can be omitted. Apps\n * that need to inject a precomputed bundle (e.g. for tests or app-specific\n * overrides not shipped with shared-domain) can pass it explicitly.\n */\ntype Props = WorkflowCanvasShellProps & {\n /** Optional override for the messages catalog passed into the canvas. */\n messages?: Record<string, unknown>\n}\n\nexport function WorkflowCanvasShell({ graph, messages }: Props) {\n const locale = useLocale()\n return (\n <Workspace\n initialGraph={graph as unknown as UiWorkflowGraph}\n locale={locale}\n {...(messages ? { messages } : {})}\n />\n )\n}\n"]}
@@ -1,15 +1,15 @@
1
1
  "use client";
2
- import { ToggleSwitch, GlassModal, ContextMenu, FormSelect, FormInput, FormTextarea, Button, IconButton } from './chunk-JN6IL6OH.mjs';
2
+ import { ToggleSwitch, GlassModal, ContextMenu, FormInput, FormTextarea, FormSelect, Button, IconButton } from './chunk-JN6IL6OH.mjs';
3
3
  import { useTranslations, I18nProvider, createI18nFromMessages } from './chunk-7VJ7CMMT.mjs';
4
4
  import { listModelProviderCatalog } from './chunk-ZV5EZXXO.mjs';
5
5
  import { GraphNodeHeader, GraphNodeMeta, GraphNodeBadge, GraphNodeIconBubble } from './chunk-OZNTQROP.mjs';
6
- import { getAgentTier, createDefaultLogicNodeConfig, applyDagreLayout } from './chunk-5W7L7BT7.mjs';
6
+ import { getAgentTier, createDefaultLogicNodeConfig, applyDagreLayout } from './chunk-G7JQ4OCE.mjs';
7
7
  import { memo, useState, useRef, useCallback, useEffect, lazy, createContext, useMemo, useContext } from 'react';
8
8
  import { Position, NodeResizer, MarkerType, useReactFlow, getBezierPath, BaseEdge, EdgeLabelRenderer, Handle, ReactFlowProvider, useNodesState, useEdgesState, addEdge, BackgroundVariant } from '@xyflow/react';
9
9
  import '@xyflow/react/dist/style.css';
10
10
  import { create } from 'zustand';
11
11
  import { PlusIcon, XMarkIcon } from '@heroicons/react/24/solid';
12
- import { Bars2Icon, CursorArrowRaysIcon, HandRaisedIcon, MagnifyingGlassPlusIcon, MagnifyingGlassMinusIcon, ArrowsPointingInIcon, ArrowUturnLeftIcon, ArrowUturnRightIcon, MapIcon, EllipsisHorizontalIcon, Squares2X2Icon, ArrowsRightLeftIcon, CommandLineIcon, ExclamationTriangleIcon, CpuChipIcon, TrashIcon, WrenchScrewdriverIcon, NewspaperIcon, ChartBarIcon, CloudIcon, ScaleIcon, AdjustmentsHorizontalIcon, CircleStackIcon, PlayIcon, StopIcon, ArrowsPointingOutIcon, CodeBracketIcon, GlobeAltIcon, DocumentTextIcon, ArrowPathIcon, BookOpenIcon, ChatBubbleLeftRightIcon, QuestionMarkCircleIcon, AdjustmentsVerticalIcon, Square3Stack3DIcon, DocumentMagnifyingGlassIcon, ListBulletIcon, PlayCircleIcon, PencilSquareIcon, ServerStackIcon, KeyIcon, RectangleGroupIcon, ChevronDownIcon, ChevronUpIcon, CloudArrowUpIcon, PresentationChartBarIcon, ChartPieIcon, ChartBarSquareIcon, CurrencyDollarIcon, ShieldCheckIcon, ClipboardDocumentCheckIcon, ShoppingBagIcon, UsersIcon, BuildingStorefrontIcon, BeakerIcon, PencilIcon, DocumentDuplicateIcon, ClipboardDocumentIcon, ClipboardIcon, PlusIcon as PlusIcon$1, XMarkIcon as XMarkIcon$1, TableCellsIcon, FunnelIcon, Cog6ToothIcon, VariableIcon, MagnifyingGlassIcon, CheckIcon } from '@heroicons/react/24/outline';
12
+ import { Bars2Icon, CursorArrowRaysIcon, HandRaisedIcon, MagnifyingGlassPlusIcon, MagnifyingGlassMinusIcon, ArrowsPointingInIcon, ArrowUturnLeftIcon, ArrowUturnRightIcon, MapIcon, EllipsisHorizontalIcon, Squares2X2Icon, ArrowsRightLeftIcon, CommandLineIcon, ExclamationTriangleIcon, CpuChipIcon, TrashIcon, WrenchScrewdriverIcon, NewspaperIcon, ChartBarIcon, CloudIcon, ScaleIcon, AdjustmentsHorizontalIcon, CircleStackIcon, PlayIcon, StopIcon, ArrowsPointingOutIcon, CodeBracketIcon, GlobeAltIcon, DocumentTextIcon, ArrowPathIcon, BookOpenIcon, ChatBubbleLeftRightIcon, QuestionMarkCircleIcon, AdjustmentsVerticalIcon, Square3Stack3DIcon, DocumentMagnifyingGlassIcon, ListBulletIcon, PlayCircleIcon, PencilSquareIcon, ServerStackIcon, KeyIcon, RectangleGroupIcon, ChevronDownIcon, ChevronUpIcon, MicrophoneIcon, SpeakerWaveIcon, CloudArrowUpIcon, PresentationChartBarIcon, ChartPieIcon, ChartBarSquareIcon, CurrencyDollarIcon, ShieldCheckIcon, ClipboardDocumentCheckIcon, ShoppingBagIcon, UsersIcon, BuildingStorefrontIcon, BeakerIcon, PencilIcon, DocumentDuplicateIcon, ClipboardDocumentIcon, ClipboardIcon, PlusIcon as PlusIcon$1, XMarkIcon as XMarkIcon$1, TableCellsIcon, FunnelIcon, Cog6ToothIcon, VariableIcon, MagnifyingGlassIcon, CheckIcon } from '@heroicons/react/24/outline';
13
13
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
14
14
 
15
15
  var DEFAULT_PASTE_OFFSET = 40;
@@ -371,7 +371,9 @@ var LOGIC_NODE_GRADIENTS = {
371
371
  datasource: "from-cyan-500 to-blue-600",
372
372
  model_provider: "from-slate-500 to-gray-600",
373
373
  dashboard_output: "from-fuchsia-500 to-pink-600",
374
- group: "from-slate-400 to-gray-500"
374
+ group: "from-slate-400 to-gray-500",
375
+ audio_input: "from-teal-400 to-cyan-500",
376
+ speech_transcriber: "from-violet-500 to-purple-600"
375
377
  };
376
378
  var LOGIC_NODE_BADGE_COLORS = {
377
379
  start: "bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300",
@@ -396,7 +398,9 @@ var LOGIC_NODE_BADGE_COLORS = {
396
398
  datasource: "bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300",
397
399
  model_provider: "bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300",
398
400
  dashboard_output: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-500/20 dark:text-fuchsia-300",
399
- group: "bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300"
401
+ group: "bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300",
402
+ audio_input: "bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300",
403
+ speech_transcriber: "bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300"
400
404
  };
401
405
  var LOGIC_NODE_BADGE_SOFT_COLORS = {
402
406
  start: "bg-green-50 text-green-600 dark:bg-green-500/20 dark:text-green-400",
@@ -421,7 +425,9 @@ var LOGIC_NODE_BADGE_SOFT_COLORS = {
421
425
  datasource: "bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400",
422
426
  model_provider: "bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400",
423
427
  dashboard_output: "bg-fuchsia-50 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400",
424
- group: "bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400"
428
+ group: "bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400",
429
+ audio_input: "bg-teal-50 text-teal-600 dark:bg-teal-500/20 dark:text-teal-400",
430
+ speech_transcriber: "bg-violet-50 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400"
425
431
  };
426
432
  var LOGIC_ICON_MAP = {
427
433
  start: PlayIcon,
@@ -446,7 +452,9 @@ var LOGIC_ICON_MAP = {
446
452
  datasource: ServerStackIcon,
447
453
  model_provider: KeyIcon,
448
454
  dashboard_output: ChartBarIcon,
449
- group: RectangleGroupIcon
455
+ group: RectangleGroupIcon,
456
+ audio_input: MicrophoneIcon,
457
+ speech_transcriber: SpeakerWaveIcon
450
458
  };
451
459
  var EXPERIMENTAL_NODE_TYPES = /* @__PURE__ */ new Set([
452
460
  "document_extractor",
@@ -482,7 +490,9 @@ var NODE_BORDER_COLORS = {
482
490
  list_operator: "border-lime-300/50 dark:border-lime-600/50",
483
491
  note: "border-gray-200/50 dark:border-gray-700/50",
484
492
  datasource: "border-cyan-300/50 dark:border-cyan-600/50",
485
- model_provider: "border-slate-300/50 dark:border-slate-600/50"
493
+ model_provider: "border-slate-300/50 dark:border-slate-600/50",
494
+ audio_input: "border-teal-300/50 dark:border-teal-600/50",
495
+ speech_transcriber: "border-violet-300/50 dark:border-violet-600/50"
486
496
  };
487
497
  function getNodeStateClass(selected, nodeType, customBorder) {
488
498
  if (selected) return NODE_SELECTED_CLASS;
@@ -572,7 +582,9 @@ var INSERTABLE_NODES = [
572
582
  { nodeType: "knowledge_base", nameKey: "knowledgeBaseNode", subcategory: "AI" },
573
583
  { nodeType: "answer", nameKey: "answerNode", subcategory: "AI" },
574
584
  { nodeType: "question_classifier", nameKey: "questionClassifierNode", subcategory: "AI" },
575
- { nodeType: "parameter_extractor", nameKey: "parameterExtractorNode", subcategory: "AI" }
585
+ { nodeType: "parameter_extractor", nameKey: "parameterExtractorNode", subcategory: "AI" },
586
+ { nodeType: "audio_input", nameKey: "audioInputNode", subcategory: "AI" },
587
+ { nodeType: "speech_transcriber", nameKey: "speechTranscriberNode", subcategory: "AI" }
576
588
  ];
577
589
  function EdgeInsertPopupComponent({ position, onSelect, onClose }) {
578
590
  const tWorkflow = useTranslations("agents.workflow");
@@ -3793,6 +3805,90 @@ var GroupFlowNode = memo(function GroupFlowNode2({ id, data, selected }) {
3793
3805
  /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-slate-500" })
3794
3806
  ] });
3795
3807
  });
3808
+ var AudioInputFlowNode = memo(function AudioInputFlowNode2({ id, data, selected }) {
3809
+ const { config, label, onDelete, onEdit } = data;
3810
+ const isCompact = data.displayMode === "compact";
3811
+ const urlPreview = config.url ? config.url.slice(0, 32) : "";
3812
+ const formatLabel = config.format && config.format.length > 0 ? config.format : "auto";
3813
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3814
+ /* @__PURE__ */ jsx(NodeRunningIndicator, { nodeId: id }),
3815
+ /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Left, id: "left-in", colorClass: "!bg-teal-500" }),
3816
+ /* @__PURE__ */ jsxs(
3817
+ NodeInteractiveCard,
3818
+ {
3819
+ nodeId: id,
3820
+ onEdit,
3821
+ compact: isCompact,
3822
+ selected,
3823
+ nodeType: "audio_input",
3824
+ children: [
3825
+ /* @__PURE__ */ jsx(
3826
+ NodeCardHeader,
3827
+ {
3828
+ icon: /* @__PURE__ */ jsx(NodeIconBubble, { tone: "audio_input", children: /* @__PURE__ */ jsx(MicrophoneIcon, { className: "h-5 w-5 text-white" }) }),
3829
+ title: label,
3830
+ description: "Validates an audio source URL for downstream voice nodes",
3831
+ compact: isCompact,
3832
+ iconClassName: ""
3833
+ }
3834
+ ),
3835
+ /* @__PURE__ */ jsxs(NodeCardMeta, { compact: isCompact, children: [
3836
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3837
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "audio_input", children: "Audio Input" }),
3838
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "audio_input", soft: true, children: formatLabel }),
3839
+ urlPreview && /* @__PURE__ */ jsx("span", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: urlPreview })
3840
+ ] }),
3841
+ /* @__PURE__ */ jsx(NodeCardDeleteAction, { nodeId: id, onDelete })
3842
+ ] })
3843
+ ]
3844
+ }
3845
+ ),
3846
+ /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-teal-500" })
3847
+ ] });
3848
+ });
3849
+ var SpeechTranscriberFlowNode = memo(function SpeechTranscriberFlowNode2({ id, data, selected }) {
3850
+ const { config, label, onDelete, onEdit } = data;
3851
+ const isCompact = data.displayMode === "compact";
3852
+ const model = config.model && config.model.length > 0 ? config.model : "whisper-1";
3853
+ const language = config.language && config.language.length > 0 ? config.language : "auto";
3854
+ const audioRefPreview = config.audioUrl ? config.audioUrl.slice(0, 32) : "";
3855
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3856
+ /* @__PURE__ */ jsx(NodeRunningIndicator, { nodeId: id }),
3857
+ /* @__PURE__ */ jsx(WorkflowHandle, { type: "target", position: Position.Left, id: "left-in", colorClass: "!bg-violet-500" }),
3858
+ /* @__PURE__ */ jsxs(
3859
+ NodeInteractiveCard,
3860
+ {
3861
+ nodeId: id,
3862
+ onEdit,
3863
+ compact: isCompact,
3864
+ selected,
3865
+ nodeType: "speech_transcriber",
3866
+ children: [
3867
+ /* @__PURE__ */ jsx(
3868
+ NodeCardHeader,
3869
+ {
3870
+ icon: /* @__PURE__ */ jsx(NodeIconBubble, { tone: "speech_transcriber", children: /* @__PURE__ */ jsx(SpeakerWaveIcon, { className: "h-5 w-5 text-white" }) }),
3871
+ title: label,
3872
+ description: "Transcribes audio via OpenAI Whisper-compatible endpoints",
3873
+ compact: isCompact,
3874
+ iconClassName: ""
3875
+ }
3876
+ ),
3877
+ /* @__PURE__ */ jsxs(NodeCardMeta, { compact: isCompact, children: [
3878
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3879
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "speech_transcriber", children: "Whisper" }),
3880
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "speech_transcriber", soft: true, children: model }),
3881
+ /* @__PURE__ */ jsx(NodeCardBadge, { tone: "speech_transcriber", soft: true, children: language }),
3882
+ audioRefPreview && /* @__PURE__ */ jsx("span", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: audioRefPreview })
3883
+ ] }),
3884
+ /* @__PURE__ */ jsx(NodeCardDeleteAction, { nodeId: id, onDelete })
3885
+ ] })
3886
+ ]
3887
+ }
3888
+ ),
3889
+ /* @__PURE__ */ jsx(WorkflowHandle, { type: "source", position: Position.Right, id: "right-out", colorClass: "!bg-violet-500" })
3890
+ ] });
3891
+ });
3796
3892
  function ConfigFormActions({
3797
3893
  cancelLabel,
3798
3894
  saveLabel,
@@ -6244,6 +6340,160 @@ function AgentNodeConfigForm({
6244
6340
  )
6245
6341
  ] });
6246
6342
  }
6343
+ var AUDIO_FORMATS = ["auto", "mp3", "wav", "m4a", "webm", "ogg", "flac", "mp4", "mpga"];
6344
+ function AudioInputNodeConfigForm({ config, onSave, onCancel }) {
6345
+ const t = useTranslations("agents.workflow.audioInputNodeConfig");
6346
+ const [url, setUrl] = useState(config.url ?? "");
6347
+ const [format, setFormat] = useState(config.format && config.format.length > 0 ? config.format : "auto");
6348
+ const handleSave = () => {
6349
+ onSave({
6350
+ ...config,
6351
+ url,
6352
+ format: format === "auto" ? void 0 : format
6353
+ });
6354
+ };
6355
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
6356
+ /* @__PURE__ */ jsx(
6357
+ FormInput,
6358
+ {
6359
+ type: "text",
6360
+ label: t("urlLabel"),
6361
+ value: url,
6362
+ onValueChange: setUrl,
6363
+ placeholder: t("urlPlaceholder")
6364
+ }
6365
+ ),
6366
+ /* @__PURE__ */ jsx(
6367
+ FormSelect,
6368
+ {
6369
+ label: t("formatLabel"),
6370
+ value: format,
6371
+ onValueChange: setFormat,
6372
+ options: AUDIO_FORMATS.map((option) => ({ value: option, label: option }))
6373
+ }
6374
+ ),
6375
+ /* @__PURE__ */ jsx(
6376
+ ConfigFormActions,
6377
+ {
6378
+ cancelLabel: t("cancel"),
6379
+ saveLabel: t("save"),
6380
+ onCancel,
6381
+ onSave: handleSave
6382
+ }
6383
+ )
6384
+ ] });
6385
+ }
6386
+ var RESPONSE_FORMATS = [
6387
+ "verbose_json",
6388
+ "json",
6389
+ "text"
6390
+ ];
6391
+ function SpeechTranscriberNodeConfigForm({ config, onSave, onCancel }) {
6392
+ const t = useTranslations("agents.workflow.speechTranscriberNodeConfig");
6393
+ const [audioUrl, setAudioUrl] = useState(config.audioUrl ?? "");
6394
+ const [model, setModel] = useState(config.model ?? "whisper-1");
6395
+ const [language, setLanguage] = useState(config.language ?? "");
6396
+ const [prompt, setPrompt] = useState(config.prompt ?? "");
6397
+ const [responseFormat, setResponseFormat] = useState(
6398
+ config.responseFormat ?? "verbose_json"
6399
+ );
6400
+ const [endpoint, setEndpoint] = useState(config.endpoint ?? "");
6401
+ const [timeoutMs, setTimeoutMs] = useState(config.timeoutMs ?? 12e4);
6402
+ const handleSave = () => {
6403
+ onSave({
6404
+ ...config,
6405
+ audioUrl,
6406
+ model: model.trim() || void 0,
6407
+ language: language.trim() || void 0,
6408
+ prompt: prompt.trim() || void 0,
6409
+ responseFormat,
6410
+ endpoint: endpoint.trim() || void 0,
6411
+ timeoutMs
6412
+ });
6413
+ };
6414
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
6415
+ /* @__PURE__ */ jsx(
6416
+ FormInput,
6417
+ {
6418
+ type: "text",
6419
+ label: t("audioUrlLabel"),
6420
+ value: audioUrl,
6421
+ onValueChange: setAudioUrl,
6422
+ placeholder: t("audioUrlPlaceholder")
6423
+ }
6424
+ ),
6425
+ /* @__PURE__ */ jsx(
6426
+ FormInput,
6427
+ {
6428
+ type: "text",
6429
+ label: t("modelLabel"),
6430
+ value: model,
6431
+ onValueChange: setModel,
6432
+ placeholder: "whisper-1"
6433
+ }
6434
+ ),
6435
+ /* @__PURE__ */ jsx(
6436
+ FormInput,
6437
+ {
6438
+ type: "text",
6439
+ label: t("languageLabel"),
6440
+ value: language,
6441
+ onValueChange: setLanguage,
6442
+ placeholder: t("languagePlaceholder")
6443
+ }
6444
+ ),
6445
+ /* @__PURE__ */ jsx(
6446
+ FormTextarea,
6447
+ {
6448
+ label: t("promptLabel"),
6449
+ value: prompt,
6450
+ onValueChange: setPrompt,
6451
+ placeholder: t("promptPlaceholder"),
6452
+ rows: 3
6453
+ }
6454
+ ),
6455
+ /* @__PURE__ */ jsx(
6456
+ FormSelect,
6457
+ {
6458
+ label: t("responseFormatLabel"),
6459
+ value: responseFormat,
6460
+ onValueChange: (value) => setResponseFormat(value),
6461
+ options: RESPONSE_FORMATS.map((value) => ({ value, label: value }))
6462
+ }
6463
+ ),
6464
+ /* @__PURE__ */ jsx(
6465
+ FormInput,
6466
+ {
6467
+ type: "text",
6468
+ label: t("endpointLabel"),
6469
+ value: endpoint,
6470
+ onValueChange: setEndpoint,
6471
+ placeholder: t("endpointPlaceholder")
6472
+ }
6473
+ ),
6474
+ /* @__PURE__ */ jsx(
6475
+ FormInput,
6476
+ {
6477
+ type: "number",
6478
+ label: t("timeoutLabel"),
6479
+ value: String(timeoutMs),
6480
+ onValueChange: (value) => setTimeoutMs(Number(value)),
6481
+ min: 1e3,
6482
+ max: 6e5,
6483
+ step: 1e3
6484
+ }
6485
+ ),
6486
+ /* @__PURE__ */ jsx(
6487
+ ConfigFormActions,
6488
+ {
6489
+ cancelLabel: t("cancel"),
6490
+ saveLabel: t("save"),
6491
+ onCancel,
6492
+ onSave: handleSave
6493
+ }
6494
+ )
6495
+ ] });
6496
+ }
6247
6497
  var NODE_TITLE_KEYS = {
6248
6498
  start: "startNodeConfig",
6249
6499
  end: "endNodeConfig",
@@ -6267,7 +6517,9 @@ var NODE_TITLE_KEYS = {
6267
6517
  group: "groupNodeConfig",
6268
6518
  model_provider: "modelProviderNodeConfig",
6269
6519
  rule: "ruleNodeConfig",
6270
- agent: "agentNodeConfig"
6520
+ agent: "agentNodeConfig",
6521
+ audio_input: "audioInputNodeConfig",
6522
+ speech_transcriber: "speechTranscriberNodeConfig"
6271
6523
  };
6272
6524
  function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables, onLoadSchema }) {
6273
6525
  const t = useTranslations("agents.workflow");
@@ -6334,6 +6586,10 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
6334
6586
  return /* @__PURE__ */ jsx(RuleNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6335
6587
  case "agent":
6336
6588
  return /* @__PURE__ */ jsx(AgentNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6589
+ case "audio_input":
6590
+ return /* @__PURE__ */ jsx(AudioInputNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6591
+ case "speech_transcriber":
6592
+ return /* @__PURE__ */ jsx(SpeechTranscriberNodeConfigForm, { config, onSave: handleSave, onCancel: closeModal });
6337
6593
  default:
6338
6594
  return null;
6339
6595
  }
@@ -6717,7 +6973,9 @@ var BUILT_IN_NODE_TYPES = {
6717
6973
  note: NoteFlowNode,
6718
6974
  datasource: DatasourceFlowNode,
6719
6975
  model_provider: ModelProviderFlowNode,
6720
- group: GroupFlowNode
6976
+ group: GroupFlowNode,
6977
+ audio_input: AudioInputFlowNode,
6978
+ speech_transcriber: SpeechTranscriberFlowNode
6721
6979
  };
6722
6980
  var ALL_LOGIC_NODE_TYPES = [
6723
6981
  "start",
@@ -6743,7 +7001,9 @@ var ALL_LOGIC_NODE_TYPES = [
6743
7001
  "entity",
6744
7002
  "datasource",
6745
7003
  "model_provider",
6746
- "group"
7004
+ "group",
7005
+ "audio_input",
7006
+ "speech_transcriber"
6747
7007
  ];
6748
7008
  function isLogicNodeType(nodeType) {
6749
7009
  return ALL_LOGIC_NODE_TYPES.includes(nodeType);
@@ -8491,5 +8751,5 @@ function Workspace({
8491
8751
  }
8492
8752
 
8493
8753
  export { AgentFlowNode, AgentToolFlowNode, AnswerFlowNode, AnthropicIcon, CATEGORY_COLORS, CATEGORY_PILL_COLORS, CodeFlowNode, CrewAIIcon, DocumentExtractorFlowNode, EXPERIMENTAL_NODE_TYPES, EndFlowNode, EntityFlowNode, FRAMEWORK_META, GoogleADKIcon, GroupFlowNode, HttpRequestFlowNode, ICON_MAP, IfElseFlowNode, IterationFlowNode, IterationStartFlowNode, KnowledgeBaseFlowNode, LOGIC_ICON_MAP, LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_GRADIENTS, LOGIC_NODE_HANDLE_COLORS, LangChainIcon, ListOperatorFlowNode, LogicNodeModal, MINIMAP_NODE_COLORS, ModelProviderFlowNode, NODE_EXECUTION_ACCENT_COLORS, NodeCard, NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeContextMenu, NodeIconBubble, NodeInteractiveCard, NodeRunningIndicator, NoteFlowNode, OpenAIIcon, PanelContextMenu, ParameterExtractorFlowNode, QuestionClassifierFlowNode, RuleFlowNode, SelectionContextMenu, StartFlowNode, StrandsIcon, TemplateTransformFlowNode, ToolFlowNode, VariableAggregatorFlowNode, VariableAssignerFlowNode, WorkflowBuilderProvider, WorkflowCanvas, WorkflowHandle, Workspace, getCompatibleModels, getDefaultFrameworkForModel, getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon, getEntityMinimapColor, getFrameworkMeta, getNodeExecutionAccent, getNodeExecutionAccentRgb, isFrameworkCompatibleWithProviders, isModelCompatibleWithFramework, useModalStore, useWorkflowBuilderClient, useWorkflowBuilderClientOptional, useWorkflowStore };
8494
- //# sourceMappingURL=chunk-IRT4T3CU.mjs.map
8495
- //# sourceMappingURL=chunk-IRT4T3CU.mjs.map
8754
+ //# sourceMappingURL=chunk-PCYL4MII.mjs.map
8755
+ //# sourceMappingURL=chunk-PCYL4MII.mjs.map