@datatechsolutions/ui 3.3.0 → 3.4.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.d.mts +22 -30
- package/dist/astrlabe/index.d.ts +22 -30
- package/dist/astrlabe/index.js +112 -112
- package/dist/astrlabe/index.mjs +5 -5
- package/dist/astrlabe/workflow-canvas.d.mts +6 -69
- package/dist/astrlabe/workflow-canvas.d.ts +6 -69
- package/dist/astrlabe/workflow-canvas.js +5 -5
- package/dist/astrlabe/workflow-canvas.mjs +4 -4
- package/dist/brand/index.d.mts +1 -15
- package/dist/brand/index.d.ts +1 -15
- package/dist/brand/index.js +0 -14
- package/dist/brand/index.js.map +1 -1
- package/dist/brand/index.mjs +0 -14
- package/dist/brand/index.mjs.map +1 -1
- package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
- package/dist/chunk-2OZZH2IO.js.map +1 -0
- package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
- package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
- package/dist/{chunk-JSNRCYSO.js → chunk-45QAUEYT.js} +4 -4
- package/dist/{chunk-JSNRCYSO.js.map → chunk-45QAUEYT.js.map} +1 -1
- package/dist/{chunk-B67DP7MI.mjs → chunk-4GDWGWHY.mjs} +4 -4
- package/dist/{chunk-B67DP7MI.mjs.map → chunk-4GDWGWHY.mjs.map} +1 -1
- package/dist/{chunk-KR2X2WHJ.js → chunk-4ICEQJH4.js} +53 -53
- package/dist/{chunk-KR2X2WHJ.js.map → chunk-4ICEQJH4.js.map} +1 -1
- package/dist/{chunk-RXZNACMI.js → chunk-6MBWKOPF.js} +33 -33
- package/dist/{chunk-RXZNACMI.js.map → chunk-6MBWKOPF.js.map} +1 -1
- package/dist/{chunk-JN6IL6OH.mjs → chunk-AGGOHPMZ.mjs} +1054 -5229
- package/dist/chunk-AGGOHPMZ.mjs.map +1 -0
- package/dist/{chunk-5GDKCFM5.mjs → chunk-AL73YAV4.mjs} +3 -3
- package/dist/{chunk-5GDKCFM5.mjs.map → chunk-AL73YAV4.mjs.map} +1 -1
- package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
- package/dist/chunk-BUDZNAKL.mjs.map +1 -0
- package/dist/{chunk-OL73LBX5.mjs → chunk-BW67WFHT.mjs} +3 -4
- package/dist/chunk-BW67WFHT.mjs.map +1 -0
- package/dist/{chunk-W5OEBO6E.js → chunk-CF7GOUBQ.js} +13 -14
- package/dist/chunk-CF7GOUBQ.js.map +1 -0
- package/dist/{chunk-IRPS5UCS.mjs → chunk-CUWPLPVY.mjs} +3 -3
- package/dist/{chunk-IRPS5UCS.mjs.map → chunk-CUWPLPVY.mjs.map} +1 -1
- package/dist/{chunk-IJAKZHXX.js → chunk-ERCDMBRT.js} +683 -645
- package/dist/chunk-ERCDMBRT.js.map +1 -0
- package/dist/{chunk-I2NZGVBG.js → chunk-FSBR4RCK.js} +1101 -5313
- package/dist/chunk-FSBR4RCK.js.map +1 -0
- package/dist/{chunk-5RM6NGZ6.mjs → chunk-IDEM3DYF.mjs} +3 -3
- package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-IDEM3DYF.mjs.map} +1 -1
- package/dist/{chunk-NJFRJ6YD.js → chunk-M7KSEUZR.js} +225 -384
- package/dist/chunk-M7KSEUZR.js.map +1 -0
- package/dist/{chunk-AOUUZ52N.js → chunk-MO5FBVV3.js} +85 -86
- package/dist/chunk-MO5FBVV3.js.map +1 -0
- package/dist/{chunk-BR2GAZKG.mjs → chunk-NAFWHJCM.mjs} +7 -7
- package/dist/{chunk-BR2GAZKG.mjs.map → chunk-NAFWHJCM.mjs.map} +1 -1
- package/dist/{chunk-3JJWPOK6.js → chunk-NCLZKVJK.js} +9 -10
- package/dist/chunk-NCLZKVJK.js.map +1 -0
- package/dist/{chunk-R4TQWXNG.mjs → chunk-NVQWHJQH.mjs} +6 -5
- package/dist/chunk-NVQWHJQH.mjs.map +1 -0
- package/dist/{chunk-ZL6C2ZAF.js → chunk-PGVZKMOA.js} +67 -67
- package/dist/{chunk-ZL6C2ZAF.js.map → chunk-PGVZKMOA.js.map} +1 -1
- package/dist/{chunk-UDDZTTLO.mjs → chunk-QBFE7ABE.mjs} +6 -7
- package/dist/chunk-QBFE7ABE.mjs.map +1 -0
- package/dist/{chunk-3ZUMJTDT.mjs → chunk-RFRXS4PC.mjs} +3 -4
- package/dist/{chunk-3JJWPOK6.js.map → chunk-RFRXS4PC.mjs.map} +1 -1
- package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
- package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
- package/dist/{chunk-MWPTSBAI.js → chunk-RLLP7VQJ.js} +26 -26
- package/dist/{chunk-MWPTSBAI.js.map → chunk-RLLP7VQJ.js.map} +1 -1
- package/dist/{chunk-GIQXB3BG.mjs → chunk-RLVOG5OQ.mjs} +3 -3
- package/dist/{chunk-GIQXB3BG.mjs.map → chunk-RLVOG5OQ.mjs.map} +1 -1
- package/dist/{chunk-2WXRRQM3.mjs → chunk-SEYUYGER.mjs} +553 -516
- package/dist/chunk-SEYUYGER.mjs.map +1 -0
- package/dist/{chunk-O6M3KDGT.mjs → chunk-SQ4KGLBZ.mjs} +4 -4
- package/dist/{chunk-O6M3KDGT.mjs.map → chunk-SQ4KGLBZ.mjs.map} +1 -1
- package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
- package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
- package/dist/{chunk-ZM5MVWIT.js → chunk-TUQLZ4QD.js} +5 -6
- package/dist/chunk-TUQLZ4QD.js.map +1 -0
- package/dist/{chunk-TVMLV675.js → chunk-UE2RDQIK.js} +98 -95
- package/dist/chunk-UE2RDQIK.js.map +1 -0
- package/dist/{chunk-HDCUWUNH.js → chunk-UJVDI66K.js} +28 -27
- package/dist/chunk-UJVDI66K.js.map +1 -0
- package/dist/{chunk-PCYL4MII.mjs → chunk-VV6SYMPM.mjs} +156 -314
- package/dist/chunk-VV6SYMPM.mjs.map +1 -0
- package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
- package/dist/chunk-VY52Y5GC.js.map +1 -0
- package/dist/{chunk-LEKZUS6N.mjs → chunk-X3GW7UPN.mjs} +4 -5
- package/dist/chunk-X3GW7UPN.mjs.map +1 -0
- package/dist/{chunk-OCELRSLO.js → chunk-Y2AYFG4E.js} +4 -4
- package/dist/{chunk-OCELRSLO.js.map → chunk-Y2AYFG4E.js.map} +1 -1
- package/dist/{chunk-TIJJHW2Z.js → chunk-YV7F7IXG.js} +36 -36
- package/dist/{chunk-TIJJHW2Z.js.map → chunk-YV7F7IXG.js.map} +1 -1
- package/dist/{chunk-MVBIAXVN.mjs → chunk-ZKSDDFHG.mjs} +14 -11
- package/dist/chunk-ZKSDDFHG.mjs.map +1 -0
- package/dist/{index-VI9gyJXl.d.mts → index-BNRGVAS5.d.mts} +9 -2
- package/dist/index-BoebbJ44.d.mts +49 -0
- package/dist/index-BoebbJ44.d.ts +49 -0
- package/dist/{index-CoB18TbG.d.ts → index-CnCY-b5V.d.ts} +9 -2
- package/dist/index.d.mts +399 -548
- package/dist/index.d.ts +399 -548
- package/dist/index.js +727 -887
- package/dist/index.mjs +3 -3
- package/dist/platform/admin/index.js +12 -12
- package/dist/platform/admin/index.mjs +6 -6
- package/dist/platform/agents-workspace.js +8 -8
- package/dist/platform/agents-workspace.mjs +7 -7
- package/dist/platform/app-shell.js +5 -5
- package/dist/platform/app-shell.mjs +4 -4
- package/dist/platform/auth/index.js +29 -29
- package/dist/platform/auth/index.mjs +6 -6
- package/dist/platform/billing/index.js +5 -5
- package/dist/platform/billing/index.mjs +4 -4
- package/dist/platform/impersonation/index.js +5 -5
- package/dist/platform/impersonation/index.mjs +4 -4
- package/dist/platform/index.d.mts +3 -39
- package/dist/platform/index.d.ts +3 -39
- package/dist/platform/index.js +95 -4805
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/index.mjs +23 -4728
- package/dist/platform/index.mjs.map +1 -1
- package/dist/platform/pages/index.d.mts +4 -4
- package/dist/platform/pages/index.d.ts +4 -4
- package/dist/platform/pages/index.js +197 -197
- package/dist/platform/pages/index.mjs +9 -9
- package/dist/platform/rbac.d.mts +2 -1
- package/dist/platform/rbac.d.ts +2 -1
- package/dist/platform/rbac.js +2 -2
- package/dist/platform/rbac.mjs +1 -1
- package/dist/platform/settings/index.js +9 -9
- package/dist/platform/settings/index.mjs +8 -8
- package/dist/platform/utils/index.js +3 -3
- package/dist/platform/utils/index.js.map +1 -1
- package/dist/platform/utils/index.mjs +1 -1
- package/dist/platform/utils/index.mjs.map +1 -1
- package/dist/platform/workflow-api-client.d.mts +2 -2
- package/dist/platform/workflow-api-client.d.ts +2 -2
- package/dist/platform/workflow-api-client.js +62 -62
- package/dist/platform/workflow-api-client.mjs +2 -2
- package/dist/platform/workflow-canvas-shell.js +6 -6
- package/dist/platform/workflow-canvas-shell.mjs +5 -5
- package/dist/{workflow-api-client-DoYj7nHz.d.mts → workflow-api-client-CpFl3WcG.d.mts} +1 -1
- package/dist/{workflow-api-client-BKD8OfP_.d.ts → workflow-api-client-uLICOanv.d.ts} +1 -1
- package/dist/workflow-canvas--qaYKuMm.d.ts +113 -0
- package/dist/workflow-canvas-B80fmD_n.d.mts +113 -0
- package/package.json +15 -5
- package/src/styles/liquid-glass.css +283 -2
- package/dist/chunk-2WXRRQM3.mjs.map +0 -1
- package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
- package/dist/chunk-AOUUZ52N.js.map +0 -1
- package/dist/chunk-FAGDZEKM.js.map +0 -1
- package/dist/chunk-HDCUWUNH.js.map +0 -1
- package/dist/chunk-HZ4LOVHM.js.map +0 -1
- package/dist/chunk-I2NZGVBG.js.map +0 -1
- package/dist/chunk-IJAKZHXX.js.map +0 -1
- package/dist/chunk-JN6IL6OH.mjs.map +0 -1
- package/dist/chunk-LEKZUS6N.mjs.map +0 -1
- package/dist/chunk-MVBIAXVN.mjs.map +0 -1
- package/dist/chunk-NJFRJ6YD.js.map +0 -1
- package/dist/chunk-OL73LBX5.mjs.map +0 -1
- package/dist/chunk-PCYL4MII.mjs.map +0 -1
- package/dist/chunk-R4TQWXNG.mjs.map +0 -1
- package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
- package/dist/chunk-TVMLV675.js.map +0 -1
- package/dist/chunk-UDDZTTLO.mjs.map +0 -1
- package/dist/chunk-W5OEBO6E.js.map +0 -1
- package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
- package/dist/chunk-ZM5MVWIT.js.map +0 -1
- package/src/brand/logos/kori-icon.svg +0 -45
- package/src/brand/logos/kori-logo-dark.svg +0 -40
- package/src/brand/logos/kori-logo.svg +0 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/pages/datasource-modal.tsx"],"names":["CircleStackIcon","ServerStackIcon","CloudIcon","ClockIcon","ShareIcon","KeyIcon","MagnifyingGlassIcon","jsxs","jsx","useState","Fragment","FormInput","ArrowLeftIcon","FormGrid","Button","CheckCircleIcon","XCircleIcon","GlassModal"],"mappings":"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","file":"chunk-TIJJHW2Z.js","sourcesContent":["import { useState, type FormEvent, type ReactNode } from 'react'\nimport {\n CircleStackIcon,\n ServerStackIcon,\n CloudIcon,\n ClockIcon,\n ShareIcon,\n KeyIcon,\n MagnifyingGlassIcon,\n ArrowLeftIcon,\n CheckCircleIcon,\n XCircleIcon,\n} from '@heroicons/react/24/outline'\nimport {\n GlassModal,\n FormGrid,\n FormInput,\n FormSelect,\n Button,\n} from '@ui/index'\n\n/* ─── Dialect catalog ─── */\n\ntype DialectCategory = {\n id: string\n labelKey: string\n icon: React.ComponentType<{ className?: string }>\n gradient: string\n dialects: DialectOption[]\n}\n\ntype DialectOption = {\n value: string\n label: string\n defaultPort?: number\n /** 'standard' = host/port/db, 'connection-string' = single URL, 'cloud' = project/dataset/key */\n formType: 'standard' | 'connection-string' | 'cloud-bigquery' | 'cloud-snowflake' | 'cloud-key' | 'vector-key'\n}\n\nconst DIALECT_CATEGORIES: DialectCategory[] = [\n {\n id: 'relational',\n labelKey: 'categoryRelational',\n icon: CircleStackIcon,\n gradient: 'from-blue-500 to-indigo-600',\n dialects: [\n { value: 'postgres', label: 'PostgreSQL', defaultPort: 5432, formType: 'standard' },\n { value: 'mysql', label: 'MySQL', defaultPort: 3306, formType: 'standard' },\n { value: 'mariadb', label: 'MariaDB', defaultPort: 3306, formType: 'standard' },\n { value: 'mssql', label: 'SQL Server', defaultPort: 1433, formType: 'standard' },\n { value: 'oracle', label: 'Oracle', defaultPort: 1521, formType: 'standard' },\n { value: 'db2', label: 'IBM Db2', defaultPort: 50000, formType: 'standard' },\n { value: 'cockroachdb', label: 'CockroachDB', defaultPort: 26257, formType: 'standard' },\n { value: 'timescaledb', label: 'TimescaleDB', defaultPort: 5432, formType: 'standard' },\n { value: 'sqlite', label: 'SQLite', formType: 'connection-string' },\n { value: 'duckdb', label: 'DuckDB', formType: 'connection-string' },\n ],\n },\n {\n id: 'nosql',\n labelKey: 'categoryNoSql',\n icon: ServerStackIcon,\n gradient: 'from-emerald-500 to-teal-600',\n dialects: [\n { value: 'mongodb', label: 'MongoDB', defaultPort: 27017, formType: 'connection-string' },\n { value: 'cassandra', label: 'Cassandra', defaultPort: 9042, formType: 'standard' },\n { value: 'scylladb', label: 'ScyllaDB', defaultPort: 9042, formType: 'standard' },\n { value: 'dynamodb', label: 'DynamoDB', formType: 'cloud-key' },\n { value: 'cosmosdb', label: 'CosmosDB', formType: 'connection-string' },\n { value: 'arangodb', label: 'ArangoDB', defaultPort: 8529, formType: 'standard' },\n ],\n },\n {\n id: 'warehouse',\n labelKey: 'categoryWarehouse',\n icon: CloudIcon,\n gradient: 'from-purple-500 to-violet-600',\n dialects: [\n { value: 'bigquery', label: 'BigQuery', formType: 'cloud-bigquery' },\n { value: 'snowflake', label: 'Snowflake', formType: 'cloud-snowflake' },\n { value: 'clickhouse', label: 'ClickHouse', defaultPort: 8123, formType: 'standard' },\n ],\n },\n {\n id: 'timeseries',\n labelKey: 'categoryTimeSeries',\n icon: ClockIcon,\n gradient: 'from-sky-500 to-cyan-600',\n dialects: [\n { value: 'influxdb', label: 'InfluxDB', formType: 'cloud-key' },\n { value: 'timestream', label: 'Timestream', formType: 'cloud-key' },\n ],\n },\n {\n id: 'graph',\n labelKey: 'categoryGraph',\n icon: ShareIcon,\n gradient: 'from-pink-500 to-rose-600',\n dialects: [\n { value: 'neo4j', label: 'Neo4j', defaultPort: 7687, formType: 'standard' },\n { value: 'neptune', label: 'Neptune', formType: 'connection-string' },\n ],\n },\n {\n id: 'keyvalue',\n labelKey: 'categoryKeyValue',\n icon: KeyIcon,\n gradient: 'from-red-500 to-orange-600',\n dialects: [\n { value: 'redis', label: 'Redis', defaultPort: 6379, formType: 'standard' },\n ],\n },\n {\n id: 'search',\n labelKey: 'categorySearch',\n icon: MagnifyingGlassIcon,\n gradient: 'from-amber-500 to-yellow-600',\n dialects: [\n { value: 'elasticsearch', label: 'Elasticsearch', defaultPort: 9200, formType: 'standard' },\n { value: 'opensearch', label: 'OpenSearch', defaultPort: 9200, formType: 'standard' },\n { value: 'pinecone', label: 'Pinecone', formType: 'vector-key' },\n { value: 'qdrant', label: 'Qdrant', defaultPort: 6333, formType: 'standard' },\n { value: 'weaviate', label: 'Weaviate', defaultPort: 8080, formType: 'standard' },\n { value: 'milvus', label: 'Milvus', defaultPort: 19530, formType: 'standard' },\n { value: 'chromadb', label: 'ChromaDB', defaultPort: 8000, formType: 'standard' },\n ],\n },\n]\n\nfunction findDialect(value: string): DialectOption | undefined {\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === value)\n if (found) return found\n }\n return undefined\n}\n\nfunction findCategory(dialectValue: string): DialectCategory | undefined {\n return DIALECT_CATEGORIES.find((c) => c.dialects.some((d) => d.value === dialectValue))\n}\n\n/* ─── Types ─── */\n\nexport type DatasourceFormData = {\n name: string\n dialect: string\n host?: string\n port?: number\n database?: string\n username?: string\n password?: string\n schema?: string\n ssl?: boolean\n readOnly?: boolean\n connectionString?: string\n projectId?: string\n dataset?: string\n keyFile?: string\n account?: string\n warehouse?: string\n region?: string\n bucket?: string\n token?: string\n apiKey?: string\n environment?: string\n index?: string\n url?: string\n /** Whitelist of tables the engine is allowed to query. Empty/undef =\n * allow every table the credential can see. */\n allowedTables?: string[]\n /** Columns the engine MUST NOT surface to workflows. Applied at the\n * driver layer — trying to SELECT a blocked column still fails. */\n blockedColumns?: string[]\n /** Max concurrent connections in the org's cached pool (default 5). */\n maxPoolSize?: number\n /** Query/connect timeout in ms (default 5000). */\n timeoutMs?: number\n}\n\ntype Labels = Record<string, string>\n\nexport type DatasourceFormModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\n/* ─── Step 1: Category + dialect picker ─── */\n\nfunction DialectPicker({\n labels,\n onSelect,\n}: {\n labels: Labels\n onSelect: (dialect: string) => void\n}) {\n return (\n <div className=\"space-y-6\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{labels.stepSelectType}</p>\n {DIALECT_CATEGORIES.map((category) => (\n <div key={category.id}>\n <div className=\"mb-2 flex items-center gap-2\">\n <div className={`flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br ${category.gradient}`}>\n <category.icon className=\"h-4 w-4 text-white\" />\n </div>\n <span className=\"text-sm font-semibold text-gray-700 dark:text-gray-200\">\n {labels[category.labelKey] ?? category.id}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-3\">\n {category.dialects.map((dialect) => (\n <button\n key={dialect.value}\n type=\"button\"\n onClick={() => onSelect(dialect.value)}\n className=\"group flex items-center gap-2 rounded-xl border border-gray-200/60 bg-white/60 px-3 py-2.5 text-left text-sm font-medium text-gray-700 transition-all hover:border-amber-400/60 hover:bg-amber-50/50 hover:text-amber-700 active:scale-[0.97] dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:hover:border-amber-400/40 dark:hover:bg-amber-500/10 dark:hover:text-amber-300\"\n >\n <CircleStackIcon className=\"h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-amber-500 dark:text-gray-500\" />\n {dialect.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/* ─── Step 2: Connection form ─── */\n\nfunction ConnectionForm({\n dialect,\n labels,\n onBack,\n onSubmit,\n}: {\n dialect: DialectOption\n labels: Labels\n onBack: () => void\n onSubmit: (data: DatasourceFormData) => void\n}) {\n const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'failed'>('idle')\n const category = findCategory(dialect.value)\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault()\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const data: DatasourceFormData = {\n name: String(formData.get('name') ?? '').trim(),\n dialect: dialect.value,\n }\n\n // Collect all possible fields\n for (const key of ['host', 'database', 'username', 'password', 'schema', 'connectionString', 'projectId', 'dataset', 'keyFile', 'account', 'warehouse', 'region', 'bucket', 'token', 'apiKey', 'environment', 'index', 'url'] as const) {\n const val = String(formData.get(key) ?? '').trim()\n if (val) (data as Record<string, unknown>)[key] = val\n }\n\n const port = String(formData.get('port') ?? '').trim()\n if (port) data.port = Number(port)\n\n data.ssl = formData.get('ssl') === 'on'\n data.readOnly = formData.get('readOnly') === 'on'\n\n // Advanced — pool size, timeout, allowlist/blocklist\n const maxPoolSize = String(formData.get('maxPoolSize') ?? '').trim()\n if (maxPoolSize) {\n const parsed = Number(maxPoolSize)\n if (Number.isFinite(parsed) && parsed > 0) data.maxPoolSize = parsed\n }\n const timeoutMs = String(formData.get('timeoutMs') ?? '').trim()\n if (timeoutMs) {\n const parsed = Number(timeoutMs)\n if (Number.isFinite(parsed) && parsed > 0) data.timeoutMs = parsed\n }\n const allowedTables = splitList(String(formData.get('allowedTables') ?? ''))\n if (allowedTables.length > 0) data.allowedTables = allowedTables\n const blockedColumns = splitList(String(formData.get('blockedColumns') ?? ''))\n if (blockedColumns.length > 0) data.blockedColumns = blockedColumns\n\n onSubmit(data)\n }\n\n function handleTestConnection() {\n setTestStatus('testing')\n // Simulate test connection — real implementation would call API\n setTimeout(() => {\n setTestStatus('success')\n setTimeout(() => setTestStatus('idle'), 3000)\n }, 1500)\n }\n\n function renderFields(): ReactNode {\n switch (dialect.formType) {\n case 'standard':\n return (\n <>\n <FormInput name=\"host\" label={labels.fieldHost} placeholder={labels.fieldHostPlaceholder} required />\n <FormInput name=\"port\" label={labels.fieldPort} type=\"number\" defaultValue={dialect.defaultPort} />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'connection-string':\n return (\n <div className=\"col-span-full\">\n <FormInput name=\"connectionString\" label={labels.fieldConnectionString} placeholder={labels.fieldConnectionStringPlaceholder} required />\n </div>\n )\n\n case 'cloud-bigquery':\n return (\n <>\n <FormInput name=\"projectId\" label={labels.fieldProjectId} placeholder={labels.fieldProjectIdPlaceholder} required />\n <FormInput name=\"dataset\" label={labels.fieldDataset} placeholder={labels.fieldDatasetPlaceholder} required />\n <div className=\"col-span-full\">\n <FormInput name=\"keyFile\" label={labels.fieldKeyFile} placeholder={labels.fieldKeyFilePlaceholder} />\n </div>\n </>\n )\n\n case 'cloud-snowflake':\n return (\n <>\n <FormInput name=\"account\" label={labels.fieldAccount} placeholder={labels.fieldAccountPlaceholder} required />\n <FormInput name=\"warehouse\" label={labels.fieldWarehouse} placeholder={labels.fieldWarehousePlaceholder} required />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} required />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'cloud-key':\n return (\n <>\n <FormInput name=\"region\" label={labels.fieldRegion} placeholder={labels.fieldRegionPlaceholder} required />\n <FormInput name=\"token\" label={labels.fieldToken} type=\"password\" placeholder={labels.fieldTokenPlaceholder} required />\n <FormInput name=\"bucket\" label={labels.fieldBucket} placeholder={labels.fieldBucketPlaceholder} />\n </>\n )\n\n case 'vector-key':\n return (\n <>\n <FormInput name=\"apiKey\" label={labels.fieldApiKey} type=\"password\" placeholder={labels.fieldApiKeyPlaceholder} required />\n <FormInput name=\"environment\" label={labels.fieldEnvironment} placeholder={labels.fieldEnvironmentPlaceholder} required />\n <FormInput name=\"index\" label={labels.fieldIndex} placeholder={labels.fieldIndexPlaceholder} />\n </>\n )\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Back button + dialect badge */}\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-lg text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-white/10 dark:hover:text-gray-300\"\n >\n <ArrowLeftIcon className=\"h-4 w-4\" />\n </button>\n <div className=\"flex items-center gap-2\">\n <div className={`flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br ${category?.gradient ?? 'from-gray-400 to-gray-500'}`}>\n {category ? <category.icon className=\"h-4 w-4 text-white\" /> : <CircleStackIcon className=\"h-4 w-4 text-white\" />}\n </div>\n <div>\n <span className=\"text-sm font-semibold text-gray-900 dark:text-white\">{dialect.label}</span>\n <span className=\"ml-2 text-xs text-gray-400\">{labels[category?.labelKey ?? ''] ?? ''}</span>\n </div>\n </div>\n </div>\n\n {/* Name field — always present */}\n <FormInput name=\"name\" label={labels.fieldName} placeholder={labels.fieldNamePlaceholder} required />\n\n {/* Dynamic fields per dialect form type */}\n <FormGrid>\n {renderFields()}\n </FormGrid>\n\n {/* Toggles */}\n <div className=\"flex flex-wrap items-center gap-6 pt-2\">\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n name=\"ssl\"\n defaultChecked\n className=\"h-4 w-4 rounded border-gray-300 text-amber-600 focus:ring-amber-500 dark:border-gray-600 dark:bg-gray-800\"\n />\n {labels.fieldSsl}\n </label>\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n name=\"readOnly\"\n defaultChecked\n className=\"h-4 w-4 rounded border-gray-300 text-amber-600 focus:ring-amber-500 dark:border-gray-600 dark:bg-gray-800\"\n />\n {labels.fieldReadOnly}\n </label>\n </div>\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">{labels.fieldReadOnlyHelp}</p>\n\n {/* Advanced — pool, timeout, table/column governance. Collapsed by\n default because the defaults (pool=5, timeout=5s, no allow/block)\n are correct for almost every datasource. Shown when an admin\n needs to lock down a specific table or raise the timeout for\n a slow analytic warehouse. */}\n <details className=\"rounded-xl border border-gray-200/60 bg-white/40 p-3 dark:border-white/10 dark:bg-white/5\">\n <summary className=\"cursor-pointer text-sm font-medium text-gray-700 dark:text-gray-300\">\n {labels.advancedToggle ?? 'Governance & performance'}\n </summary>\n <div className=\"mt-3 space-y-3\">\n <FormGrid>\n <FormInput\n name=\"maxPoolSize\"\n label={labels.fieldMaxPoolSize ?? 'Max pool size'}\n type=\"number\"\n min={1}\n max={100}\n placeholder=\"5\"\n />\n <FormInput\n name=\"timeoutMs\"\n label={labels.fieldTimeoutMs ?? 'Timeout (ms)'}\n type=\"number\"\n min={100}\n placeholder=\"5000\"\n />\n </FormGrid>\n <FormInput\n name=\"allowedTables\"\n label={labels.fieldAllowedTables ?? 'Allowed tables (comma-separated)'}\n placeholder=\"stations, current_prices, competitor_prices\"\n />\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">\n {labels.fieldAllowedTablesHelp\n ?? 'Leave blank to allow every table the credential can see. Otherwise only the listed tables are queryable from workflows.'}\n </p>\n <FormInput\n name=\"blockedColumns\"\n label={labels.fieldBlockedColumns ?? 'Blocked columns (comma-separated)'}\n placeholder=\"customers.ssn, employees.salary\"\n />\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">\n {labels.fieldBlockedColumnsHelp\n ?? 'Columns the driver must never surface, even if referenced by a workflow. Use table.column notation for specificity.'}\n </p>\n </div>\n </details>\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 border-t border-gray-200/60 pt-5 dark:border-white/10\">\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"zinc\"\n onClick={handleTestConnection}\n disabled={testStatus === 'testing'}\n >\n {testStatus === 'testing' ? labels.testing : labels.testConnection}\n </Button>\n\n {testStatus === 'success' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-emerald-600 dark:text-emerald-400\">\n <CheckCircleIcon className=\"h-4 w-4\" />\n {labels.connectionSuccess}\n </span>\n )}\n {testStatus === 'failed' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-red-600 dark:text-red-400\">\n <XCircleIcon className=\"h-4 w-4\" />\n {labels.connectionFailed}\n </span>\n )}\n\n <div className=\"flex-1\" />\n\n <Button type=\"submit\" size=\"sm\" color=\"amber\">\n {labels.save}\n </Button>\n </div>\n </form>\n )\n}\n\n/* ─── Form Modal ─── */\n\nexport function DatasourceFormModal({ open, onClose, labels, onSave }: DatasourceFormModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\n/* ─── Modal (for /datasources page) ─── */\n\nexport type DatasourceModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\nexport function DatasourceModal({ open, onClose, labels, onSave }: DatasourceModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\nexport { DIALECT_CATEGORIES, findDialect, findCategory }\n\nfunction splitList(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/platform/pages/datasource-modal.tsx"],"names":["CircleStackIcon","ServerStackIcon","CloudIcon","ClockIcon","ShareIcon","KeyIcon","MagnifyingGlassIcon","jsxs","jsx","useState","Fragment","FormInput","ArrowLeftIcon","FormGrid","Button","CheckCircleIcon","XCircleIcon","GlassModal"],"mappings":"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","file":"chunk-YV7F7IXG.js","sourcesContent":["import { useState, type FormEvent, type ReactNode } from 'react'\nimport {\n CircleStackIcon,\n ServerStackIcon,\n CloudIcon,\n ClockIcon,\n ShareIcon,\n KeyIcon,\n MagnifyingGlassIcon,\n ArrowLeftIcon,\n CheckCircleIcon,\n XCircleIcon,\n} from '@heroicons/react/24/outline'\nimport {\n GlassModal,\n FormGrid,\n FormInput,\n FormSelect,\n Button,\n} from '@ui/index'\n\n/* ─── Dialect catalog ─── */\n\ntype DialectCategory = {\n id: string\n labelKey: string\n icon: React.ComponentType<{ className?: string }>\n gradient: string\n dialects: DialectOption[]\n}\n\ntype DialectOption = {\n value: string\n label: string\n defaultPort?: number\n /** 'standard' = host/port/db, 'connection-string' = single URL, 'cloud' = project/dataset/key */\n formType: 'standard' | 'connection-string' | 'cloud-bigquery' | 'cloud-snowflake' | 'cloud-key' | 'vector-key'\n}\n\nconst DIALECT_CATEGORIES: DialectCategory[] = [\n {\n id: 'relational',\n labelKey: 'categoryRelational',\n icon: CircleStackIcon,\n gradient: 'from-blue-500 to-indigo-600',\n dialects: [\n { value: 'postgres', label: 'PostgreSQL', defaultPort: 5432, formType: 'standard' },\n { value: 'mysql', label: 'MySQL', defaultPort: 3306, formType: 'standard' },\n { value: 'mariadb', label: 'MariaDB', defaultPort: 3306, formType: 'standard' },\n { value: 'mssql', label: 'SQL Server', defaultPort: 1433, formType: 'standard' },\n { value: 'oracle', label: 'Oracle', defaultPort: 1521, formType: 'standard' },\n { value: 'db2', label: 'IBM Db2', defaultPort: 50000, formType: 'standard' },\n { value: 'cockroachdb', label: 'CockroachDB', defaultPort: 26257, formType: 'standard' },\n { value: 'timescaledb', label: 'TimescaleDB', defaultPort: 5432, formType: 'standard' },\n { value: 'sqlite', label: 'SQLite', formType: 'connection-string' },\n { value: 'duckdb', label: 'DuckDB', formType: 'connection-string' },\n ],\n },\n {\n id: 'nosql',\n labelKey: 'categoryNoSql',\n icon: ServerStackIcon,\n gradient: 'from-emerald-500 to-teal-600',\n dialects: [\n { value: 'mongodb', label: 'MongoDB', defaultPort: 27017, formType: 'connection-string' },\n { value: 'cassandra', label: 'Cassandra', defaultPort: 9042, formType: 'standard' },\n { value: 'scylladb', label: 'ScyllaDB', defaultPort: 9042, formType: 'standard' },\n { value: 'dynamodb', label: 'DynamoDB', formType: 'cloud-key' },\n { value: 'cosmosdb', label: 'CosmosDB', formType: 'connection-string' },\n { value: 'arangodb', label: 'ArangoDB', defaultPort: 8529, formType: 'standard' },\n ],\n },\n {\n id: 'warehouse',\n labelKey: 'categoryWarehouse',\n icon: CloudIcon,\n gradient: 'from-purple-500 to-violet-600',\n dialects: [\n { value: 'bigquery', label: 'BigQuery', formType: 'cloud-bigquery' },\n { value: 'snowflake', label: 'Snowflake', formType: 'cloud-snowflake' },\n { value: 'clickhouse', label: 'ClickHouse', defaultPort: 8123, formType: 'standard' },\n ],\n },\n {\n id: 'timeseries',\n labelKey: 'categoryTimeSeries',\n icon: ClockIcon,\n gradient: 'from-sky-500 to-cyan-600',\n dialects: [\n { value: 'influxdb', label: 'InfluxDB', formType: 'cloud-key' },\n { value: 'timestream', label: 'Timestream', formType: 'cloud-key' },\n ],\n },\n {\n id: 'graph',\n labelKey: 'categoryGraph',\n icon: ShareIcon,\n gradient: 'from-pink-500 to-rose-600',\n dialects: [\n { value: 'neo4j', label: 'Neo4j', defaultPort: 7687, formType: 'standard' },\n { value: 'neptune', label: 'Neptune', formType: 'connection-string' },\n ],\n },\n {\n id: 'keyvalue',\n labelKey: 'categoryKeyValue',\n icon: KeyIcon,\n gradient: 'from-red-500 to-orange-600',\n dialects: [\n { value: 'redis', label: 'Redis', defaultPort: 6379, formType: 'standard' },\n ],\n },\n {\n id: 'search',\n labelKey: 'categorySearch',\n icon: MagnifyingGlassIcon,\n gradient: 'from-amber-500 to-yellow-600',\n dialects: [\n { value: 'elasticsearch', label: 'Elasticsearch', defaultPort: 9200, formType: 'standard' },\n { value: 'opensearch', label: 'OpenSearch', defaultPort: 9200, formType: 'standard' },\n { value: 'pinecone', label: 'Pinecone', formType: 'vector-key' },\n { value: 'qdrant', label: 'Qdrant', defaultPort: 6333, formType: 'standard' },\n { value: 'weaviate', label: 'Weaviate', defaultPort: 8080, formType: 'standard' },\n { value: 'milvus', label: 'Milvus', defaultPort: 19530, formType: 'standard' },\n { value: 'chromadb', label: 'ChromaDB', defaultPort: 8000, formType: 'standard' },\n ],\n },\n]\n\nfunction findDialect(value: string): DialectOption | undefined {\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === value)\n if (found) return found\n }\n return undefined\n}\n\nfunction findCategory(dialectValue: string): DialectCategory | undefined {\n return DIALECT_CATEGORIES.find((c) => c.dialects.some((d) => d.value === dialectValue))\n}\n\n/* ─── Types ─── */\n\nexport type DatasourceFormData = {\n name: string\n dialect: string\n host?: string\n port?: number\n database?: string\n username?: string\n password?: string\n schema?: string\n ssl?: boolean\n readOnly?: boolean\n connectionString?: string\n projectId?: string\n dataset?: string\n keyFile?: string\n account?: string\n warehouse?: string\n region?: string\n bucket?: string\n token?: string\n apiKey?: string\n environment?: string\n index?: string\n url?: string\n /** Whitelist of tables the engine is allowed to query. Empty/undef =\n * allow every table the credential can see. */\n allowedTables?: string[]\n /** Columns the engine MUST NOT surface to workflows. Applied at the\n * driver layer — trying to SELECT a blocked column still fails. */\n blockedColumns?: string[]\n /** Max concurrent connections in the org's cached pool (default 5). */\n maxPoolSize?: number\n /** Query/connect timeout in ms (default 5000). */\n timeoutMs?: number\n}\n\ntype Labels = Record<string, string>\n\nexport type DatasourceFormModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\n/* ─── Step 1: Category + dialect picker ─── */\n\nfunction DialectPicker({\n labels,\n onSelect,\n}: {\n labels: Labels\n onSelect: (dialect: string) => void\n}) {\n return (\n <div className=\"space-y-6\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{labels.stepSelectType}</p>\n {DIALECT_CATEGORIES.map((category) => (\n <div key={category.id}>\n <div className=\"mb-2 flex items-center gap-2\">\n <div className={`flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br ${category.gradient}`}>\n <category.icon className=\"h-4 w-4 text-white\" />\n </div>\n <span className=\"text-sm font-semibold text-gray-700 dark:text-gray-200\">\n {labels[category.labelKey] ?? category.id}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-3\">\n {category.dialects.map((dialect) => (\n <button\n key={dialect.value}\n type=\"button\"\n onClick={() => onSelect(dialect.value)}\n className=\"group flex items-center gap-2 rounded-xl border border-gray-200/60 bg-white/60 px-3 py-2.5 text-left text-sm font-medium text-gray-700 transition-all hover:border-amber-400/60 hover:bg-amber-50/50 hover:text-amber-700 active:scale-[0.97] dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:hover:border-amber-400/40 dark:hover:bg-amber-500/10 dark:hover:text-amber-300\"\n >\n <CircleStackIcon className=\"h-4 w-4 shrink-0 text-gray-400 transition-colors group-hover:text-amber-500 dark:text-gray-500\" />\n {dialect.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/* ─── Step 2: Connection form ─── */\n\nfunction ConnectionForm({\n dialect,\n labels,\n onBack,\n onSubmit,\n}: {\n dialect: DialectOption\n labels: Labels\n onBack: () => void\n onSubmit: (data: DatasourceFormData) => void\n}) {\n const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'failed'>('idle')\n const category = findCategory(dialect.value)\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault()\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const data: DatasourceFormData = {\n name: String(formData.get('name') ?? '').trim(),\n dialect: dialect.value,\n }\n\n // Collect all possible fields\n for (const key of ['host', 'database', 'username', 'password', 'schema', 'connectionString', 'projectId', 'dataset', 'keyFile', 'account', 'warehouse', 'region', 'bucket', 'token', 'apiKey', 'environment', 'index', 'url'] as const) {\n const val = String(formData.get(key) ?? '').trim()\n if (val) (data as Record<string, unknown>)[key] = val\n }\n\n const port = String(formData.get('port') ?? '').trim()\n if (port) data.port = Number(port)\n\n data.ssl = formData.get('ssl') === 'on'\n data.readOnly = formData.get('readOnly') === 'on'\n\n // Advanced — pool size, timeout, allowlist/blocklist\n const maxPoolSize = String(formData.get('maxPoolSize') ?? '').trim()\n if (maxPoolSize) {\n const parsed = Number(maxPoolSize)\n if (Number.isFinite(parsed) && parsed > 0) data.maxPoolSize = parsed\n }\n const timeoutMs = String(formData.get('timeoutMs') ?? '').trim()\n if (timeoutMs) {\n const parsed = Number(timeoutMs)\n if (Number.isFinite(parsed) && parsed > 0) data.timeoutMs = parsed\n }\n const allowedTables = splitList(String(formData.get('allowedTables') ?? ''))\n if (allowedTables.length > 0) data.allowedTables = allowedTables\n const blockedColumns = splitList(String(formData.get('blockedColumns') ?? ''))\n if (blockedColumns.length > 0) data.blockedColumns = blockedColumns\n\n onSubmit(data)\n }\n\n function handleTestConnection() {\n setTestStatus('testing')\n // Simulate test connection — real implementation would call API\n setTimeout(() => {\n setTestStatus('success')\n setTimeout(() => setTestStatus('idle'), 3000)\n }, 1500)\n }\n\n function renderFields(): ReactNode {\n switch (dialect.formType) {\n case 'standard':\n return (\n <>\n <FormInput name=\"host\" label={labels.fieldHost} placeholder={labels.fieldHostPlaceholder} required />\n <FormInput name=\"port\" label={labels.fieldPort} type=\"number\" defaultValue={dialect.defaultPort} />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'connection-string':\n return (\n <div className=\"col-span-full\">\n <FormInput name=\"connectionString\" label={labels.fieldConnectionString} placeholder={labels.fieldConnectionStringPlaceholder} required />\n </div>\n )\n\n case 'cloud-bigquery':\n return (\n <>\n <FormInput name=\"projectId\" label={labels.fieldProjectId} placeholder={labels.fieldProjectIdPlaceholder} required />\n <FormInput name=\"dataset\" label={labels.fieldDataset} placeholder={labels.fieldDatasetPlaceholder} required />\n <div className=\"col-span-full\">\n <FormInput name=\"keyFile\" label={labels.fieldKeyFile} placeholder={labels.fieldKeyFilePlaceholder} />\n </div>\n </>\n )\n\n case 'cloud-snowflake':\n return (\n <>\n <FormInput name=\"account\" label={labels.fieldAccount} placeholder={labels.fieldAccountPlaceholder} required />\n <FormInput name=\"warehouse\" label={labels.fieldWarehouse} placeholder={labels.fieldWarehousePlaceholder} required />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} required />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'cloud-key':\n return (\n <>\n <FormInput name=\"region\" label={labels.fieldRegion} placeholder={labels.fieldRegionPlaceholder} required />\n <FormInput name=\"token\" label={labels.fieldToken} type=\"password\" placeholder={labels.fieldTokenPlaceholder} required />\n <FormInput name=\"bucket\" label={labels.fieldBucket} placeholder={labels.fieldBucketPlaceholder} />\n </>\n )\n\n case 'vector-key':\n return (\n <>\n <FormInput name=\"apiKey\" label={labels.fieldApiKey} type=\"password\" placeholder={labels.fieldApiKeyPlaceholder} required />\n <FormInput name=\"environment\" label={labels.fieldEnvironment} placeholder={labels.fieldEnvironmentPlaceholder} required />\n <FormInput name=\"index\" label={labels.fieldIndex} placeholder={labels.fieldIndexPlaceholder} />\n </>\n )\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Back button + dialect badge */}\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"flex h-8 w-8 items-center justify-center rounded-lg text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-white/10 dark:hover:text-gray-300\"\n >\n <ArrowLeftIcon className=\"h-4 w-4\" />\n </button>\n <div className=\"flex items-center gap-2\">\n <div className={`flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br ${category?.gradient ?? 'from-gray-400 to-gray-500'}`}>\n {category ? <category.icon className=\"h-4 w-4 text-white\" /> : <CircleStackIcon className=\"h-4 w-4 text-white\" />}\n </div>\n <div>\n <span className=\"text-sm font-semibold text-gray-900 dark:text-white\">{dialect.label}</span>\n <span className=\"ml-2 text-xs text-gray-400\">{labels[category?.labelKey ?? ''] ?? ''}</span>\n </div>\n </div>\n </div>\n\n {/* Name field — always present */}\n <FormInput name=\"name\" label={labels.fieldName} placeholder={labels.fieldNamePlaceholder} required />\n\n {/* Dynamic fields per dialect form type */}\n <FormGrid>\n {renderFields()}\n </FormGrid>\n\n {/* Toggles */}\n <div className=\"flex flex-wrap items-center gap-6 pt-2\">\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n name=\"ssl\"\n defaultChecked\n className=\"h-4 w-4 rounded border-gray-300 text-amber-600 focus:ring-amber-500 dark:border-gray-600 dark:bg-gray-800\"\n />\n {labels.fieldSsl}\n </label>\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n name=\"readOnly\"\n defaultChecked\n className=\"h-4 w-4 rounded border-gray-300 text-amber-600 focus:ring-amber-500 dark:border-gray-600 dark:bg-gray-800\"\n />\n {labels.fieldReadOnly}\n </label>\n </div>\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">{labels.fieldReadOnlyHelp}</p>\n\n {/* Advanced — pool, timeout, table/column governance. Collapsed by\n default because the defaults (pool=5, timeout=5s, no allow/block)\n are correct for almost every datasource. Shown when an admin\n needs to lock down a specific table or raise the timeout for\n a slow analytic warehouse. */}\n <details className=\"rounded-xl border border-gray-200/60 bg-white/40 p-3 dark:border-white/10 dark:bg-white/5\">\n <summary className=\"cursor-pointer text-sm font-medium text-gray-700 dark:text-gray-300\">\n {labels.advancedToggle ?? 'Governance & performance'}\n </summary>\n <div className=\"mt-3 space-y-3\">\n <FormGrid>\n <FormInput\n name=\"maxPoolSize\"\n label={labels.fieldMaxPoolSize ?? 'Max pool size'}\n type=\"number\"\n min={1}\n max={100}\n placeholder=\"5\"\n />\n <FormInput\n name=\"timeoutMs\"\n label={labels.fieldTimeoutMs ?? 'Timeout (ms)'}\n type=\"number\"\n min={100}\n placeholder=\"5000\"\n />\n </FormGrid>\n <FormInput\n name=\"allowedTables\"\n label={labels.fieldAllowedTables ?? 'Allowed tables (comma-separated)'}\n placeholder=\"stations, current_prices, competitor_prices\"\n />\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">\n {labels.fieldAllowedTablesHelp\n ?? 'Leave blank to allow every table the credential can see. Otherwise only the listed tables are queryable from workflows.'}\n </p>\n <FormInput\n name=\"blockedColumns\"\n label={labels.fieldBlockedColumns ?? 'Blocked columns (comma-separated)'}\n placeholder=\"customers.ssn, employees.salary\"\n />\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">\n {labels.fieldBlockedColumnsHelp\n ?? 'Columns the driver must never surface, even if referenced by a workflow. Use table.column notation for specificity.'}\n </p>\n </div>\n </details>\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 border-t border-gray-200/60 pt-5 dark:border-white/10\">\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"zinc\"\n onClick={handleTestConnection}\n disabled={testStatus === 'testing'}\n >\n {testStatus === 'testing' ? labels.testing : labels.testConnection}\n </Button>\n\n {testStatus === 'success' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-emerald-600 dark:text-emerald-400\">\n <CheckCircleIcon className=\"h-4 w-4\" />\n {labels.connectionSuccess}\n </span>\n )}\n {testStatus === 'failed' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-red-600 dark:text-red-400\">\n <XCircleIcon className=\"h-4 w-4\" />\n {labels.connectionFailed}\n </span>\n )}\n\n <div className=\"flex-1\" />\n\n <Button type=\"submit\" size=\"sm\" color=\"amber\">\n {labels.save}\n </Button>\n </div>\n </form>\n )\n}\n\n/* ─── Form Modal ─── */\n\nexport function DatasourceFormModal({ open, onClose, labels, onSave }: DatasourceFormModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\n/* ─── Modal (for /datasources page) ─── */\n\nexport type DatasourceModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\nexport function DatasourceModal({ open, onClose, labels, onSave }: DatasourceModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\nexport { DIALECT_CATEGORIES, findDialect, findCategory }\n\nfunction splitList(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { OtpInput, SocialLoginButtons, AuthLayout, PasswordStrengthMeter } from './chunk-
|
|
3
|
-
import { SegmentedControl, Spinner, Input, Button, Card, PasswordInput, FormCheckbox, EmptyState, BaseForm, CardContent, Avatar, Badge, ListCard, ListCardItem, InlineSpinner, DynamicIslandConfirm } from './chunk-
|
|
2
|
+
import { OtpInput, SocialLoginButtons, AuthLayout, PasswordStrengthMeter } from './chunk-AL73YAV4.mjs';
|
|
3
|
+
import { useAuth, SegmentedControl, Spinner, Input, Button, Card, useSocialProviders, PasswordInput, FormCheckbox, EmptyState, BaseForm, CardContent, Avatar, Badge, ListCard, ListCardItem, InlineSpinner, DynamicIslandConfirm } from './chunk-AGGOHPMZ.mjs';
|
|
4
4
|
import { triggerHaptic } from './chunk-D2JF6C3E.mjs';
|
|
5
5
|
import { useTranslations } from './chunk-7VJ7CMMT.mjs';
|
|
6
6
|
import { useState, useCallback, useEffect, Fragment as Fragment$1 } from 'react';
|
|
7
7
|
import { EnvelopeIcon, UserIcon, LockClosedIcon, CheckCircleIcon, DevicePhoneMobileIcon, PaperAirplaneIcon, ShieldExclamationIcon, BuildingOffice2Icon } from '@heroicons/react/24/outline';
|
|
8
|
-
import { useAuth, useSocialProviders } from '@datatechsolutions/windsock/client';
|
|
9
8
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
10
9
|
import { ChevronRightIcon, ChevronUpDownIcon, ArrowRightStartOnRectangleIcon } from '@heroicons/react/20/solid';
|
|
11
10
|
import { Menu, Transition } from '@headlessui/react';
|
|
@@ -179,10 +178,10 @@ function SignIn({
|
|
|
179
178
|
} else if (result.mfaRequired && result.mfaToken) {
|
|
180
179
|
setMfaRequired({ mfaToken: result.mfaToken });
|
|
181
180
|
} else if (result.error) {
|
|
182
|
-
setError(t("signInError"));
|
|
181
|
+
setError(result.error || t("signInError"));
|
|
183
182
|
}
|
|
184
|
-
} catch {
|
|
185
|
-
setError(t("signInError"));
|
|
183
|
+
} catch (e) {
|
|
184
|
+
setError(e instanceof Error ? e.message : t("signInError"));
|
|
186
185
|
} finally {
|
|
187
186
|
setIsSubmitting(false);
|
|
188
187
|
}
|
|
@@ -426,11 +425,15 @@ function SignUp({
|
|
|
426
425
|
setError(null);
|
|
427
426
|
setIsSubmitting(true);
|
|
428
427
|
try {
|
|
429
|
-
await client.register({ name, email, password });
|
|
428
|
+
const result = await client.register({ name, email, password });
|
|
429
|
+
if (!result.success) {
|
|
430
|
+
setError(result.error ?? t("signUpError"));
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
430
433
|
setRegisteredEmail(email);
|
|
431
434
|
setPhase("verify");
|
|
432
|
-
} catch {
|
|
433
|
-
setError(t("signUpError"));
|
|
435
|
+
} catch (e) {
|
|
436
|
+
setError(e instanceof Error ? e.message : t("signUpError"));
|
|
434
437
|
} finally {
|
|
435
438
|
setIsSubmitting(false);
|
|
436
439
|
}
|
|
@@ -1326,5 +1329,5 @@ function UserButton({ menuItems = [], onSignOut, avatarUrl, labels }) {
|
|
|
1326
1329
|
}
|
|
1327
1330
|
|
|
1328
1331
|
export { ConsentScreen, ForgotPassword, MfaChallenge, PasswordlessSignIn, ResetPassword, SignIn, SignUp, SsoConnectorList, SsoEmailForm, UserButton, VerifyEmail };
|
|
1329
|
-
//# sourceMappingURL=chunk-
|
|
1330
|
-
//# sourceMappingURL=chunk-
|
|
1332
|
+
//# sourceMappingURL=chunk-ZKSDDFHG.mjs.map
|
|
1333
|
+
//# sourceMappingURL=chunk-ZKSDDFHG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/auth/mfa-challenge.tsx","../src/platform/auth/sign-in.tsx","../src/platform/auth/verify-email.tsx","../src/platform/auth/sign-up.tsx","../src/platform/auth/forgot-password.tsx","../src/platform/auth/reset-password.tsx","../src/platform/auth/passwordless-sign-in.tsx","../src/platform/auth/consent-screen.tsx","../src/platform/auth/sso-connector-list.tsx","../src/platform/auth/sso-email-form.tsx","../src/platform/auth/user-button.tsx"],"names":["useState","useCallback","jsx","jsxs","EnvelopeIcon","Fragment","CheckCircleIcon","LockClosedIcon"],"mappings":"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","file":"chunk-ZKSDDFHG.mjs","sourcesContent":["import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Input,\n SegmentedControl,\n Button,\n Spinner,\n triggerHaptic,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { useAuth } from '../../_auth'\n\nexport type { MfaMethod, MfaChallengeProps } from '@datatechsolutions/shared-domain'\nimport type { MfaMethod, MfaChallengeProps } from '@datatechsolutions/shared-domain'\n\nexport function MfaChallenge({\n mfaToken,\n onSuccess,\n onCancel,\n availableMethods = ['totp', 'backup'],\n embedded = false,\n}: MfaChallengeProps) {\n const t = useTranslations('windsock')\n const { verifyMFA } = useAuth()\n\n const [method, setMethod] = useState<MfaMethod>('totp')\n const [totpCode, setTotpCode] = useState('')\n const [backupCode, setBackupCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [failureCount, setFailureCount] = useState(0)\n\n const handleVerify = useCallback(\n async (code: string) => {\n setError(null)\n setIsSubmitting(true)\n triggerHaptic('light')\n\n try {\n const result = await verifyMFA(mfaToken, code)\n if (result.success) {\n triggerHaptic('success')\n onSuccess?.()\n } else if (result.error) {\n triggerHaptic('error')\n const count = failureCount + 1\n setFailureCount(count)\n if (count >= 3) {\n setError(t('mfa.challenge.errorLockout'))\n } else {\n setError(t('mfa.challenge.errorInvalidCode'))\n }\n }\n } catch {\n triggerHaptic('error')\n setError(t('mfa.challenge.errorVerificationFailed'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [verifyMFA, mfaToken, onSuccess, failureCount, t],\n )\n\n const handleTotpComplete = useCallback(\n (code: string) => {\n handleVerify(code)\n },\n [handleVerify],\n )\n\n const handleBackupSubmit = useCallback(() => {\n if (backupCode.trim()) {\n handleVerify(backupCode.trim())\n }\n }, [backupCode, handleVerify])\n\n const handleMethodChange = useCallback((value: string) => {\n triggerHaptic('light')\n setMethod(value as MfaMethod)\n setError(null)\n setTotpCode('')\n setBackupCode('')\n }, [])\n\n const segments = availableMethods.map((m) => ({\n value: m,\n label: m === 'totp' ? t('mfa.challenge.methodTotp') : t('mfa.challenge.methodBackup'),\n }))\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white\">\n {t('mfa.challenge.title')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {method === 'totp'\n ? t('mfa.challenge.descriptionTotp')\n : t('mfa.challenge.descriptionBackup')}\n </p>\n </div>\n\n {/* Method toggle */}\n {availableMethods.length > 1 && (\n <div className=\"flex justify-center\">\n <SegmentedControl\n segments={segments}\n value={method}\n onChange={handleMethodChange}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Lockout warning banner */}\n {failureCount >= 3 && (\n <div className=\"rounded-xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-400 text-center\">\n {t('mfa.challenge.lockoutWarning')}\n </div>\n )}\n\n {/* TOTP input */}\n {method === 'totp' && (\n <div className=\"space-y-4\">\n <OtpInput\n value={totpCode}\n onChange={setTotpCode}\n onComplete={handleTotpComplete}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n />\n {isSubmitting && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n </div>\n )}\n\n {/* Backup code input */}\n {method === 'backup' && (\n <div className=\"space-y-4\">\n <Input\n value={backupCode}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setBackupCode(event.target.value)}\n placeholder={t('mfa.challenge.backupCodePlaceholder')}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n className=\"font-mono text-center tracking-widest\"\n />\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleBackupSubmit}\n disabled={!backupCode.trim() || isSubmitting}\n loading={isSubmitting}\n >\n {t('mfa.challenge.verifyBackupCode')}\n </Button>\n </div>\n )}\n\n {/* Cancel link */}\n {onCancel && (\n <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={() => {\n triggerHaptic('light')\n onCancel()\n }}\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('mfa.challenge.useDifferentAccount')}\n </button>\n </div>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {content}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Input,\n PasswordInput,\n Button,\n} from '@ui/index'\nimport {\n AuthLayout,\n SocialLoginButtons,\n type SocialProvider,\n} from './components'\nimport { EnvelopeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, useSocialProviders } from '../../_auth'\nimport { MfaChallenge } from './mfa-challenge'\n\nexport type { SignInProps } from '@datatechsolutions/shared-domain'\nimport type { SignInProps, MfaRequiredState } from '@datatechsolutions/shared-domain'\n\nexport function SignIn({\n onSuccess,\n onSignUp,\n onForgotPassword,\n onPasswordless,\n socialProviders,\n allowPasswordless,\n defaultEmail = '',\n embedded = false,\n heroPanel,\n}: SignInProps) {\n const t = useTranslations('windsock')\n const { loginWithCredentials, loginWithProvider } = useAuth()\n\n // Caller may pass an explicit `socialProviders` prop to pin the\n // button list (useful in tests / storybook); otherwise we fetch\n // the enabled set from the backend so we never advertise a button\n // whose callback will fail.\n const discovered = useSocialProviders()\n const effectiveSocialProviders: readonly SocialProvider[] = socialProviders ?? discovered.providers\n\n const [email, setEmail] = useState(defaultEmail)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [mfaRequired, setMfaRequired] = useState<MfaRequiredState | null>(null)\n const [socialLoading, setSocialLoading] = useState<SocialProvider | null>(null)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n const result = await loginWithCredentials(email, password)\n\n if (result.success) {\n onSuccess?.()\n } else if (result.mfaRequired && result.mfaToken) {\n setMfaRequired({ mfaToken: result.mfaToken })\n } else if (result.error) {\n // Surface the actual Cognito error (e.g. \"User does not\n // exist\", \"Incorrect username or password\") instead of the\n // generic placeholder. Falls back to the translated string\n // when Cognito returns no message.\n setError(result.error || t('signInError'))\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : t('signInError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [email, password, loginWithCredentials, onSuccess, t],\n )\n\n const handleSocialLogin = useCallback((provider: SocialProvider) => {\n setSocialLoading(provider)\n loginWithProvider(provider)\n }, [loginWithProvider])\n\n if (mfaRequired) {\n return (\n <MfaChallenge\n mfaToken={mfaRequired.mfaToken}\n onSuccess={onSuccess}\n onCancel={() => setMfaRequired(null)}\n embedded={embedded}\n />\n )\n }\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('signInTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('signInSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Credentials form */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n />\n\n <PasswordInput\n label={t('passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('passwordPlaceholder')}\n autoComplete=\"current-password\"\n disabled={isSubmitting}\n required\n />\n\n {/* Forgot password link */}\n {onForgotPassword && (\n <div className=\"flex justify-end\">\n <button\n type=\"button\"\n onClick={onForgotPassword}\n className=\"text-sm font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('forgotPassword')}\n </button>\n </div>\n )}\n\n <Button\n type=\"submit\"\n color=\"ios-glass-green\"\n size=\"lg\"\n fullWidth\n disabled={isSubmitting || !email || !password}\n loading={isSubmitting}\n >\n {t('signInButton')}\n </Button>\n </form>\n\n {/* Social login divider — only renders when the backend\n reports at least one enabled provider (or the caller passed\n an explicit list). We never show a divider for zero buttons. */}\n {effectiveSocialProviders.length > 0 && (\n <>\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-gray-200/60 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white/80 px-3 text-gray-400 dark:bg-gray-900/80 dark:text-gray-500\">\n {t('orContinueWith')}\n </span>\n </div>\n </div>\n\n <SocialLoginButtons\n providers={[...effectiveSocialProviders]}\n onProviderClick={handleSocialLogin}\n loading={socialLoading}\n disabled={isSubmitting}\n />\n </>\n )}\n\n {/* Passwordless sign-in button */}\n {allowPasswordless && (\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n size=\"lg\"\n fullWidth\n onClick={onPasswordless}\n >\n <EnvelopeIcon className=\"h-5 w-5\" />\n {t('signInPasswordless')}\n </Button>\n )}\n\n {/* Sign up link */}\n {onSignUp && (\n <p className=\"text-center text-sm text-gray-500 dark:text-gray-400\">\n {t('noAccount')}{' '}\n <button\n type=\"button\"\n onClick={onSignUp}\n className=\"font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('signUpLink')}\n </button>\n </p>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <AuthLayout heroPanel={heroPanel}>\n {content}\n </AuthLayout>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Button,\n Spinner,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { EnvelopeIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { VerifyEmailProps } from '@datatechsolutions/shared-domain'\nimport type { VerifyEmailProps } from '@datatechsolutions/shared-domain'\n\nconst RESEND_COOLDOWN_SECONDS = 60\n\nexport function VerifyEmail({\n email,\n onSuccess,\n onResend,\n embedded = false,\n}: VerifyEmailProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [isResending, setIsResending] = useState(false)\n const [cooldown, setCooldown] = useState(RESEND_COOLDOWN_SECONDS)\n\n // Countdown timer for resend cooldown\n useEffect(() => {\n if (cooldown <= 0) return\n\n const timer = setInterval(() => {\n setCooldown((previous) => {\n if (previous <= 1) {\n clearInterval(timer)\n return 0\n }\n return previous - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [cooldown])\n\n const handleComplete = useCallback(\n async (completedCode: string) => {\n setError(null)\n setIsSubmitting(true)\n\n try {\n await client.verifyEmail(email, completedCode)\n onSuccess?.()\n } catch {\n setError(t('verifyEmailError'))\n setCode('')\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, email, onSuccess, t],\n )\n\n const handleResend = useCallback(async () => {\n if (cooldown > 0 || isResending) return\n\n setIsResending(true)\n setError(null)\n\n try {\n onResend?.()\n setCooldown(RESEND_COOLDOWN_SECONDS)\n } catch {\n setError(t('resendEmailError'))\n } finally {\n setIsResending(false)\n }\n }, [cooldown, isResending, onResend, t])\n\n const content = (\n <div className=\"space-y-6\">\n {/* Mail icon header */}\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-full bg-blue-50 dark:bg-blue-500/10\">\n <EnvelopeIcon className=\"h-8 w-8 text-ios-blue\" />\n </div>\n <div>\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">\n {t('verifyEmailTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('verifyEmailSubtitle', { email })}\n </p>\n </div>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* OTP input */}\n <OtpInput\n value={code}\n onChange={setCode}\n onComplete={handleComplete}\n error={error ?? undefined}\n disabled={isSubmitting}\n autoFocus\n />\n\n {/* Spinner while verifying */}\n {isSubmitting && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n\n {/* Resend section */}\n <div className=\"text-center space-y-1\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('verifyEmailNoCode')}\n </p>\n <Button\n type=\"button\"\n outline\n onClick={handleResend}\n disabled={cooldown > 0 || isResending || isSubmitting}\n loading={isResending}\n >\n {cooldown > 0\n ? t('resendEmailCooldown', { seconds: cooldown })\n : t('resendEmailButton')}\n </Button>\n </div>\n </div>\n )\n\n if (embedded) return content\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {content}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Input,\n PasswordInput,\n Button,\n FormCheckbox,\n} from '@ui/index'\nimport {\n AuthLayout,\n PasswordStrengthMeter,\n SocialLoginButtons,\n type SocialProvider,\n} from './components'\nimport { EnvelopeIcon, LockClosedIcon, UserIcon } from '@heroicons/react/24/outline'\nimport { useAuth, useSocialProviders } from '../../_auth'\nimport { VerifyEmail } from './verify-email'\n\nexport type { SignUpProps, SignUpPhase } from '@datatechsolutions/shared-domain'\nimport type { SignUpProps, SignUpPhase } from '@datatechsolutions/shared-domain'\n\nexport function SignUp({\n onSuccess,\n onSignIn,\n socialProviders,\n passwordPolicy,\n embedded = false,\n heroPanel,\n}: SignUpProps) {\n const t = useTranslations('windsock')\n const { client, loginWithProvider } = useAuth()\n\n // Same source-of-truth story as SignIn — prop override wins when\n // present, otherwise fetch the enabled list so the register page\n // never advertises a provider that can't complete the callback.\n const discovered = useSocialProviders()\n const effectiveSocialProviders: readonly SocialProvider[] = socialProviders ?? discovered.providers\n\n const [phase, setPhase] = useState<SignUpPhase>('form')\n const [registeredEmail, setRegisteredEmail] = useState('')\n\n const [name, setName] = useState('')\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [termsAccepted, setTermsAccepted] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [socialLoading, setSocialLoading] = useState<SocialProvider | null>(null)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n // `client.register` resolves with `{success, error}` — it does\n // NOT throw on Cognito-side failures (password policy, email\n // already in use, etc.). Without checking `result.success` the\n // user got silently bounced to the verify-code page even on\n // failed signups. Surface the actual Cognito message; fall\n // back to the generic translation only when the SDK throws\n // (network / config error).\n const result = await client.register({ name, email, password })\n if (!result.success) {\n setError(result.error ?? t('signUpError'))\n return\n }\n setRegisteredEmail(email)\n setPhase('verify')\n } catch (e) {\n setError(e instanceof Error ? e.message : t('signUpError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, name, email, password, t],\n )\n\n const handleSocialLogin = useCallback((provider: SocialProvider) => {\n setSocialLoading(provider)\n loginWithProvider(provider)\n }, [loginWithProvider])\n\n if (phase === 'verify') {\n return (\n <VerifyEmail\n email={registeredEmail}\n onSuccess={onSuccess}\n embedded={embedded}\n />\n )\n }\n\n const isFormValid = name.trim() !== '' && email.trim() !== '' && password !== '' && termsAccepted\n\n const content = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('signUpTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('signUpSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Registration form */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <Input\n label={t('nameLabel')}\n type=\"text\"\n value={name}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setName(event.target.value)}\n placeholder={t('namePlaceholder')}\n icon={<UserIcon className=\"h-5 w-5\" />}\n autoComplete=\"name\"\n disabled={isSubmitting}\n required\n />\n\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n />\n\n <div className=\"space-y-2\">\n <PasswordInput\n label={t('passwordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('passwordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n required\n />\n <PasswordStrengthMeter\n password={password}\n policy={passwordPolicy}\n showRequirements\n />\n </div>\n\n <FormCheckbox\n checked={termsAccepted}\n onChange={setTermsAccepted}\n label={t('termsLabel')}\n description={t('termsDescription')}\n disabled={isSubmitting}\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n disabled={isSubmitting || !isFormValid}\n loading={isSubmitting}\n >\n {t('signUpButton')}\n </Button>\n </form>\n\n {/* Social login divider — only rendered when at least one\n provider is enabled. Source: caller's prop override if set,\n otherwise backend /oauth/providers. */}\n {effectiveSocialProviders.length > 0 && (\n <>\n <div className=\"relative\">\n <div className=\"absolute inset-0 flex items-center\">\n <div className=\"w-full border-t border-gray-200 dark:border-white/10\" />\n </div>\n <div className=\"relative flex justify-center text-xs\">\n <span className=\"bg-white dark:bg-gray-900 px-3 text-gray-400 dark:text-gray-500\">\n {t('orContinueWith')}\n </span>\n </div>\n </div>\n\n <SocialLoginButtons\n providers={[...effectiveSocialProviders]}\n onProviderClick={handleSocialLogin}\n loading={socialLoading}\n disabled={isSubmitting}\n />\n </>\n )}\n\n {/* Sign in link */}\n {onSignIn && (\n <p className=\"text-center text-sm text-gray-500 dark:text-gray-400\">\n {t('alreadyHaveAccount')}{' '}\n <button\n type=\"button\"\n onClick={onSignIn}\n className=\"font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('signInLink')}\n </button>\n </p>\n )}\n </div>\n )\n\n if (embedded) return content\n\n return (\n <AuthLayout heroPanel={heroPanel}>\n {content}\n </AuthLayout>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n BaseForm,\n Input,\n EmptyState,\n} from '@ui/index'\nimport { EnvelopeIcon, CheckCircleIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { ForgotPasswordProps, ForgotPasswordPhase } from '@datatechsolutions/shared-domain'\nimport type { ForgotPasswordProps, ForgotPasswordPhase } from '@datatechsolutions/shared-domain'\n\nexport function ForgotPassword({\n onSuccess,\n onBack,\n defaultEmail = '',\n embedded = false,\n}: ForgotPasswordProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [phase, setPhase] = useState<ForgotPasswordPhase>('form')\n const [email, setEmail] = useState(defaultEmail)\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n setIsSubmitting(true)\n\n try {\n await client.requestPasswordReset(email)\n setPhase('sent')\n onSuccess?.()\n } catch {\n setError(t('forgotPasswordError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, email, onSuccess, t],\n )\n\n const sentContent = (\n <div className=\"space-y-5\">\n <EmptyState\n variant=\"minimal\"\n icon={CheckCircleIcon}\n message={t('forgotPasswordSuccessTitle')}\n description={t('forgotPasswordSuccessDescription', { email })}\n />\n\n {onBack && (\n <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors\"\n >\n {t('backToSignIn')}\n </button>\n </div>\n )}\n </div>\n )\n\n const formContent = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('forgotPasswordTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('forgotPasswordSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n <BaseForm\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n iconColor=\"blue\"\n title={t('forgotPasswordFormTitle')}\n subtitle={t('forgotPasswordFormSubtitle')}\n onSubmit={handleSubmit}\n submitLabel={t('forgotPasswordSubmit')}\n isLoading={isSubmitting}\n submitDisabled={!email.trim()}\n showHeader={false}\n >\n <Input\n label={t('emailLabel')}\n type=\"email\"\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setEmail(event.target.value)}\n placeholder={t('emailPlaceholder')}\n icon={<EnvelopeIcon className=\"h-5 w-5\" />}\n autoComplete=\"email\"\n disabled={isSubmitting}\n required\n autoFocus\n />\n </BaseForm>\n\n {/* Back link */}\n {onBack && (\n <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('backToSignIn')}\n </button>\n </div>\n )}\n </div>\n )\n\n const activeContent = phase === 'sent' ? sentContent : formContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import React, { useState, useCallback, type FormEvent } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n PasswordInput,\n Button,\n EmptyState,\n} from '@ui/index'\nimport { PasswordStrengthMeter } from './components'\nimport { LockClosedIcon, CheckCircleIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { ResetPasswordProps, ResetPasswordPhase } from '@datatechsolutions/shared-domain'\nimport type { ResetPasswordProps, ResetPasswordPhase } from '@datatechsolutions/shared-domain'\n\nexport function ResetPassword({\n token,\n onSuccess,\n passwordPolicy,\n embedded = false,\n}: ResetPasswordProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [phase, setPhase] = useState<ResetPasswordPhase>('form')\n const [password, setPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const passwordsMatch = password !== '' && confirmPassword !== '' && password === confirmPassword\n const hasPasswordMismatch = confirmPassword !== '' && password !== confirmPassword\n\n const handleSubmit = useCallback(\n async (event: FormEvent) => {\n event.preventDefault()\n setError(null)\n\n if (!passwordsMatch) {\n setError(t('passwordMismatchError'))\n return\n }\n\n setIsSubmitting(true)\n\n try {\n await client.resetPassword(token, password)\n setPhase('success')\n onSuccess?.()\n } catch {\n setError(t('resetPasswordError'))\n } finally {\n setIsSubmitting(false)\n }\n },\n [client, token, password, passwordsMatch, onSuccess, t],\n )\n\n const successContent = (\n <div className=\"space-y-5\">\n <EmptyState\n variant=\"minimal\"\n icon={CheckCircleIcon}\n message={t('resetPasswordSuccessTitle')}\n description={t('resetPasswordSuccessDescription')}\n />\n </div>\n )\n\n const formContent = (\n <div className=\"space-y-5\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('resetPasswordTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('resetPasswordSubtitle')}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-2\">\n <PasswordInput\n label={t('newPasswordLabel')}\n value={password}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setPassword(event.target.value)}\n placeholder={t('newPasswordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n required\n autoFocus\n />\n <PasswordStrengthMeter\n password={password}\n policy={passwordPolicy}\n showRequirements\n />\n </div>\n\n <PasswordInput\n label={t('confirmPasswordLabel')}\n value={confirmPassword}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setConfirmPassword(event.target.value)}\n placeholder={t('confirmPasswordPlaceholder')}\n icon={<LockClosedIcon className=\"h-5 w-5\" />}\n autoComplete=\"new-password\"\n disabled={isSubmitting}\n error={hasPasswordMismatch ? t('passwordMismatchError') : undefined}\n success={passwordsMatch}\n required\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n disabled={isSubmitting || !passwordsMatch}\n loading={isSubmitting}\n >\n {t('resetPasswordButton')}\n </Button>\n </form>\n </div>\n )\n\n const activeContent = phase === 'success' ? successContent : formContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n Input,\n Button,\n EmptyState,\n SegmentedControl,\n Spinner,\n} from '@ui/index'\nimport { OtpInput } from './components'\nimport { EnvelopeIcon, DevicePhoneMobileIcon, PaperAirplaneIcon } from '@heroicons/react/24/outline'\nimport { useAuth } from '../../_auth'\n\nexport type { PasswordlessChannel, PasswordlessSignInProps, PasswordlessStep } from '@datatechsolutions/shared-domain'\nimport type { PasswordlessChannel, PasswordlessSignInProps, PasswordlessStep } from '@datatechsolutions/shared-domain'\n\nexport function PasswordlessSignIn({\n defaultMethod = 'email',\n allowedChannels = ['email', 'sms'],\n onSuccess,\n onBack,\n defaultEmail = '',\n embedded = false,\n}: PasswordlessSignInProps) {\n const t = useTranslations('windsock')\n const { client } = useAuth()\n\n const [step, setStep] = useState<PasswordlessStep>('input')\n const [channel, setChannel] = useState<PasswordlessChannel>(\n allowedChannels.includes(defaultMethod) ? defaultMethod : (allowedChannels[0] ?? 'email'),\n )\n const [identifier, setIdentifier] = useState(defaultEmail)\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [isSending, setIsSending] = useState(false)\n const [isVerifying, setIsVerifying] = useState(false)\n\n const channelSegments = allowedChannels.map((ch) => ({\n value: ch,\n label: ch === 'email' ? t('channelEmail') : t('channelSms'),\n }))\n\n const handleSendCode = useCallback(async () => {\n if (!identifier.trim()) return\n\n setError(null)\n setIsSending(true)\n\n try {\n await client.sendPasswordlessCode(channel, identifier.trim())\n setStep('sent')\n\n // Auto-advance to OTP entry after a brief confirmation display\n setTimeout(() => setStep('verify'), 1500)\n } catch {\n setError(t('passwordlessSendError'))\n } finally {\n setIsSending(false)\n }\n }, [client, channel, identifier, t])\n\n const handleVerifyCode = useCallback(\n async (completedCode: string) => {\n setError(null)\n setIsVerifying(true)\n\n try {\n await client.verifyPasswordlessCode(channel, identifier.trim(), completedCode)\n onSuccess?.()\n } catch {\n setError(t('passwordlessVerifyError'))\n setCode('')\n } finally {\n setIsVerifying(false)\n }\n },\n [client, channel, identifier, onSuccess, t],\n )\n\n // Step 1: Channel + identifier input\n const inputContent = (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {t('passwordlessTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {t('passwordlessSubtitle')}\n </p>\n </div>\n\n {/* Channel selector */}\n {allowedChannels.length > 1 && (\n <div className=\"flex justify-center\">\n <SegmentedControl\n segments={channelSegments}\n value={channel}\n onChange={(value: string) => {\n setChannel(value as PasswordlessChannel)\n setIdentifier(value === 'email' ? defaultEmail : '')\n setError(null)\n }}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* Identifier input */}\n <Input\n label={channel === 'email' ? t('emailLabel') : t('phoneLabel')}\n type={channel === 'email' ? 'email' : 'tel'}\n value={identifier}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setIdentifier(event.target.value)}\n placeholder={channel === 'email' ? t('emailPlaceholder') : t('phonePlaceholder')}\n icon={\n channel === 'email'\n ? <EnvelopeIcon className=\"h-5 w-5\" />\n : <DevicePhoneMobileIcon className=\"h-5 w-5\" />\n }\n autoComplete={channel === 'email' ? 'email' : 'tel'}\n disabled={isSending}\n autoFocus\n />\n\n <Button\n type=\"button\"\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleSendCode}\n disabled={isSending || !identifier.trim()}\n loading={isSending}\n >\n {t('passwordlessSendButton')}\n </Button>\n\n {/* Back link */}\n {onBack && (\n <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={onBack}\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('backToSignIn')}\n </button>\n </div>\n )}\n </div>\n )\n\n // Step 2: Sent confirmation (brief auto-advancing state)\n const sentContent = (\n <div className=\"space-y-6\">\n <EmptyState\n variant=\"minimal\"\n icon={PaperAirplaneIcon}\n message={t('passwordlessCodeSentTitle')}\n description={\n channel === 'email'\n ? t('passwordlessCodeSentEmailDescription', { email: identifier })\n : t('passwordlessCodeSentSmsDescription', { phone: identifier })\n }\n />\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n </div>\n )\n\n // Step 3: OTP entry\n const verifyContent = (\n <div className=\"space-y-6\">\n {/* Header */}\n <div className=\"text-center\">\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">\n {t('passwordlessEnterCodeTitle')}\n </h2>\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {channel === 'email'\n ? t('passwordlessEnterCodeEmailSubtitle', { email: identifier })\n : t('passwordlessEnterCodeSmsSubtitle', { phone: identifier })}\n </p>\n </div>\n\n {/* Error banner */}\n {error && (\n <div className=\"rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center\" role=\"alert\">\n {error}\n </div>\n )}\n\n {/* OTP input */}\n <OtpInput\n value={code}\n onChange={setCode}\n onComplete={handleVerifyCode}\n error={error ?? undefined}\n disabled={isVerifying}\n autoFocus\n />\n\n {/* Verifying spinner */}\n {isVerifying && (\n <div className=\"flex justify-center\">\n <Spinner />\n </div>\n )}\n\n {/* Resend / back */}\n <div className=\"flex items-center justify-between text-sm\">\n <button\n type=\"button\"\n onClick={() => {\n setStep('input')\n setCode('')\n setError(null)\n }}\n className=\"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 transition-colors\"\n >\n {t('passwordlessChangeIdentifier')}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setCode('')\n setError(null)\n handleSendCode()\n }}\n disabled={isSending}\n className=\"font-medium text-ios-blue hover:text-blue-700 dark:hover:text-blue-400 transition-colors disabled:opacity-50\"\n >\n {t('resendEmailButton')}\n </button>\n </div>\n </div>\n )\n\n const activeContent = step === 'input'\n ? inputContent\n : step === 'sent'\n ? sentContent\n : verifyContent\n\n if (embedded) return activeContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto max-w-md p-6 sm:p-8\">\n {activeContent}\n </Card>\n )\n}\n","import { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n Card,\n CardContent,\n Avatar,\n Badge,\n ListCard,\n ListCardItem,\n FormCheckbox,\n Button,\n triggerHaptic,\n} from '@ui/index'\nimport { AuthLayout } from './components'\nimport { ShieldExclamationIcon } from '@heroicons/react/24/outline'\n\nexport type { ConsentScreenProps } from '@datatechsolutions/shared-domain'\nimport type { ConsentScreenProps } from '@datatechsolutions/shared-domain'\n\nexport function ConsentScreen({\n application,\n scopes,\n grantedScopes,\n onApprove,\n onDeny,\n isSubmitting = false,\n}: ConsentScreenProps) {\n const t = useTranslations('windsock')\n\n const [checkedScopes, setCheckedScopes] = useState<Set<string>>(\n () => new Set(grantedScopes && grantedScopes.length > 0 ? grantedScopes : scopes.map((s) => s.id)),\n )\n\n const handleScopeToggle = useCallback((scopeId: string, checked: boolean) => {\n setCheckedScopes((previous) => {\n const next = new Set(previous)\n if (checked) {\n next.add(scopeId)\n } else {\n next.delete(scopeId)\n }\n return next\n })\n }, [])\n\n const handleApprove = useCallback(() => {\n triggerHaptic('light')\n onApprove(Array.from(checkedScopes))\n }, [checkedScopes, onApprove])\n\n const handleDeny = useCallback(() => {\n triggerHaptic('light')\n onDeny()\n }, [onDeny])\n\n const appInitials = application.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <AuthLayout>\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"space-y-6 p-6 sm:p-8\">\n {/* App identity */}\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Avatar\n src={application.logoUrl}\n initials={appInitials}\n alt={application.name}\n />\n\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {application.name}\n </span>\n {application.verified ? (\n <Badge color=\"green\">\n {t('consent.verified')}\n </Badge>\n ) : (\n <Badge color=\"amber\">\n {t('consent.unverified')}\n </Badge>\n )}\n </div>\n\n {application.url && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{application.url}</p>\n )}\n\n <p className=\"text-sm text-gray-600 dark:text-gray-300\">\n {t('consent.wantsAccess')}\n </p>\n </div>\n </div>\n\n {/* Unverified warning */}\n {!application.verified && (\n <div className=\"flex items-start gap-3 rounded-xl border border-amber-500/30 bg-amber-500/10 p-3\">\n <ShieldExclamationIcon className=\"mt-0.5 h-5 w-5 shrink-0 text-amber-600 dark:text-amber-400\" />\n <p className=\"text-sm text-amber-700 dark:text-amber-300\">\n {t('consent.unverifiedWarning', { name: application.name })}\n </p>\n </div>\n )}\n\n {/* Scopes */}\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400\">\n {t('consent.permissionsLabel')}\n </p>\n <ListCard>\n {scopes.map((scope) => (\n <ListCardItem\n key={scope.id}\n leading={\n <FormCheckbox\n checked={checkedScopes.has(scope.id)}\n onChange={(checked: boolean) => handleScopeToggle(scope.id, checked)}\n label=\"\"\n />\n }\n onClick={() => handleScopeToggle(scope.id, !checkedScopes.has(scope.id))}\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {scope.name}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{scope.description}</p>\n </div>\n </ListCardItem>\n ))}\n </ListCard>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-col gap-2 sm:flex-row-reverse\">\n <Button\n color=\"ios-glass-blue\"\n fullWidth\n onClick={handleApprove}\n loading={isSubmitting}\n disabled={isSubmitting || checkedScopes.size === 0}\n >\n {t('consent.approveButton')}\n </Button>\n <Button\n outline\n fullWidth\n onClick={handleDeny}\n disabled={isSubmitting}\n >\n {t('consent.denyButton')}\n </Button>\n </div>\n\n <p className=\"text-center text-xs text-gray-400 dark:text-gray-500\">\n {t('consent.footerNote')}\n </p>\n </CardContent>\n </Card>\n </AuthLayout>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { Avatar, Badge, ListCard, ListCardItem, InlineSpinner } from '@ui/index'\nimport { ChevronRightIcon } from '@heroicons/react/20/solid'\n\nexport type { SsoConnector, SsoConnectorListProps } from '@datatechsolutions/shared-domain'\nimport type { SsoConnector, SsoConnectorListProps } from '@datatechsolutions/shared-domain'\n\nexport function SsoConnectorList({ connectors, onSelect, loading = false }: SsoConnectorListProps) {\n const t = useTranslations('windsock')\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-8 text-sm text-gray-500 dark:text-gray-400\">\n <InlineSpinner />\n <span>{t('sso.connectorList.loading')}</span>\n </div>\n )\n }\n\n if (connectors.length === 0) {\n return (\n <p className=\"py-6 text-center text-sm text-gray-500 dark:text-gray-400\">\n {t('sso.connectorList.empty')}\n </p>\n )\n }\n\n return (\n <ListCard>\n {connectors.map((connector) => {\n const initials = connector.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <ListCardItem\n key={connector.id}\n leading={\n <Avatar\n src={connector.logoUrl}\n initials={initials}\n alt={connector.name}\n />\n }\n trailing={\n <div className=\"flex items-center gap-2\">\n <Badge color=\"zinc\">\n {connector.type === 'saml' ? t('sso.connectorList.typeSaml') : t('sso.connectorList.typeOidc')}\n </Badge>\n <ChevronRightIcon className=\"h-4 w-4 text-gray-400\" />\n </div>\n }\n onClick={() => onSelect(connector)}\n >\n <div>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {connector.name}\n </p>\n {connector.domain && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{connector.domain}</p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n )\n}\n","import React, { useState, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { BaseForm, Input, Button, Card, CardContent } from '@ui/index'\nimport { BuildingOffice2Icon } from '@heroicons/react/24/outline'\nimport { SsoConnectorList } from './sso-connector-list'\n\nexport type { SsoConnector, SsoEmailFormProps, SsoEmailFormPhase } from '@datatechsolutions/shared-domain'\nimport type { SsoConnector, SsoEmailFormProps, SsoEmailFormPhase as Phase } from '@datatechsolutions/shared-domain'\n\nexport function SsoEmailForm({\n onEmailSubmit,\n onConnectorSelect,\n defaultEmail = '',\n embedded = false,\n}: SsoEmailFormProps) {\n const t = useTranslations('windsock')\n\n const [phase, setPhase] = useState<Phase>('email')\n const [email, setEmail] = useState(defaultEmail)\n const [emailError, setEmailError] = useState<string | null>(null)\n const [connectors, setConnectors] = useState<SsoConnector[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [loadingConnectors, setLoadingConnectors] = useState(false)\n\n const validateEmail = useCallback(\n (value: string): boolean => {\n if (!value.trim()) {\n setEmailError(t('sso.emailForm.errorEmailRequired'))\n return false\n }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n setEmailError(t('sso.emailForm.errorEmailInvalid'))\n return false\n }\n setEmailError(null)\n return true\n },\n [t],\n )\n\n const handleEmailSubmit = useCallback(async () => {\n if (!validateEmail(email)) return\n\n setIsSubmitting(true)\n setLoadingConnectors(true)\n\n try {\n const discovered = await onEmailSubmit(email)\n setConnectors(discovered)\n setPhase('connectors')\n } catch {\n setEmailError(t('sso.emailForm.errorDiscoveryFailed'))\n } finally {\n setIsSubmitting(false)\n setLoadingConnectors(false)\n }\n }, [email, onEmailSubmit, validateEmail, t])\n\n const handleBackToEmail = useCallback(() => {\n setPhase('email')\n setConnectors([])\n setEmailError(null)\n }, [])\n\n if (phase === 'connectors') {\n const connectorsContent = (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {t('sso.emailForm.connectorsTitle')}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {t('sso.emailForm.connectorsSubtitle', { email })}\n </p>\n </div>\n\n <SsoConnectorList\n connectors={connectors}\n onSelect={onConnectorSelect}\n loading={loadingConnectors}\n />\n\n <div className=\"text-center\">\n <button\n type=\"button\"\n onClick={handleBackToEmail}\n className=\"text-sm text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n {t('sso.emailForm.backButton')}\n </button>\n </div>\n </div>\n )\n\n if (embedded) return connectorsContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"p-6 sm:p-8\">\n {connectorsContent}\n </CardContent>\n </Card>\n )\n }\n\n const emailContent = (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {t('sso.emailForm.title')}\n </p>\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {t('sso.emailForm.subtitle')}\n </p>\n </div>\n\n <BaseForm onSubmit={handleEmailSubmit} submitLabel={t('sso.emailForm.continueButton')} showFooter={false}>\n <Input\n type=\"email\"\n label={t('sso.emailForm.emailLabel')}\n placeholder={t('sso.emailForm.emailPlaceholder')}\n value={email}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n setEmail(event.target.value)\n if (emailError) setEmailError(null)\n }}\n error={emailError ?? undefined}\n icon={<BuildingOffice2Icon className=\"h-5 w-5\" />}\n disabled={isSubmitting}\n autoFocus\n autoComplete=\"email\"\n />\n\n <Button\n type=\"submit\"\n color=\"ios-glass-blue\"\n fullWidth\n loading={isSubmitting}\n disabled={isSubmitting}\n >\n {t('sso.emailForm.continueButton')}\n </Button>\n </BaseForm>\n </div>\n )\n\n if (embedded) return emailContent\n\n return (\n <Card variant=\"glass\" className=\"mx-auto w-full max-w-md\">\n <CardContent className=\"p-6 sm:p-8\">\n {emailContent}\n </CardContent>\n </Card>\n )\n}\n","import { useState, useCallback, Fragment, type ReactNode } from 'react'\nimport { Menu, Transition } from '@headlessui/react'\nimport { Avatar, DynamicIslandConfirm, triggerHaptic } from '@ui/index'\nimport { useAuth } from '../../_auth'\nimport { ChevronUpDownIcon, ArrowRightStartOnRectangleIcon } from '@heroicons/react/20/solid'\n\nexport type { UserButtonProps } from '@datatechsolutions/shared-domain'\nimport type { UserButtonProps } from '@datatechsolutions/shared-domain'\n\nconst DEFAULT_LABELS = {\n menuLabel: 'User menu',\n userAlt: 'User',\n signOut: 'Sign out',\n signOutConfirmTitle: 'Sign out?',\n signOutConfirmButton: 'Sign out',\n signOutCancelButton: 'Cancel',\n} as const\n\nexport function UserButton({ menuItems = [], onSignOut, avatarUrl, labels }: UserButtonProps) {\n const resolvedLabels = { ...DEFAULT_LABELS, ...labels }\n const { user, logout, status } = useAuth()\n\n const [confirmSignOut, setConfirmSignOut] = useState(false)\n\n if (status !== 'authenticated') {\n return null\n }\n\n const userInitials = user?.name\n ? user.name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n : user?.email?.slice(0, 2).toUpperCase() ?? '??'\n\n const resolvedAvatarUrl = avatarUrl ?? user?.image\n\n const handleSignOutRequest = () => {\n triggerHaptic('light')\n setConfirmSignOut(true)\n }\n\n const handleSignOutConfirm = async () => {\n triggerHaptic('success')\n setConfirmSignOut(false)\n try {\n // Pass '/' as redirect — logout() handles the full end-session flow\n // including server-side session termination and redirect.\n // onSignOut is called before the redirect for any cleanup the consumer needs.\n onSignOut?.()\n await logout('/')\n } catch {\n // logout errors are non-critical; session will expire naturally\n }\n }\n\n const handleSignOutCancel = () => {\n triggerHaptic('light')\n setConfirmSignOut(false)\n }\n\n return (\n <>\n <Menu as=\"div\" className=\"relative inline-block text-left\">\n <Menu.Button\n className=\"flex items-center gap-2 rounded-full p-1 transition-opacity hover:opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\"\n aria-label={resolvedLabels.menuLabel}\n >\n <Avatar\n src={resolvedAvatarUrl}\n initials={userInitials}\n alt={user?.name ?? user?.email ?? resolvedLabels.userAlt}\n />\n <ChevronUpDownIcon className=\"h-4 w-4 text-gray-500 dark:text-gray-400\" />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <Menu.Items className=\"liquid-surface absolute right-0 z-50 mt-2 w-60 origin-top-right rounded-2xl shadow-lg ring-1 ring-black/5 focus:outline-none dark:ring-white/10\">\n {/* User identity header */}\n <div className=\"flex items-center gap-3 border-b border-gray-200/60 px-4 py-3 dark:border-white/10\">\n <Avatar\n src={resolvedAvatarUrl}\n initials={userInitials}\n alt={user?.name ?? user?.email ?? resolvedLabels.userAlt}\n />\n <div className=\"min-w-0 flex-1\">\n {user?.name && (\n <p className=\"truncate text-sm font-medium text-gray-900 dark:text-white\">\n {user.name}\n </p>\n )}\n {user?.email && (\n <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">{user.email}</p>\n )}\n </div>\n </div>\n\n {/* Custom menu items */}\n {menuItems.length > 0 && (\n <>\n <div className=\"px-1 py-1\">\n {menuItems.map((item, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <button\n type=\"button\"\n onClick={() => {\n triggerHaptic('light')\n item.onClick()\n }}\n className={`flex w-full items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors ${\n active\n ? 'bg-gray-100 text-gray-900 dark:bg-white/10 dark:text-white'\n : 'text-gray-700 dark:text-gray-300'\n }`}\n >\n {item.icon ? (\n <span className=\"h-4 w-4 shrink-0 text-gray-400\">{item.icon as ReactNode}</span>\n ) : null}\n {item.label}\n </button>\n )}\n </Menu.Item>\n ))}\n </div>\n <div className=\"border-t border-gray-200/60 dark:border-white/10\" />\n </>\n )}\n\n {/* Sign out */}\n <div className=\"border-t border-gray-200/60 px-1 py-1 dark:border-white/10\">\n <Menu.Item>\n {({ active }) => (\n <button\n type=\"button\"\n onClick={handleSignOutRequest}\n className={`flex w-full items-center gap-2 rounded-xl px-3 py-2 text-sm transition-colors ${\n active\n ? 'bg-red-50 text-red-700 dark:bg-red-500/10 dark:text-red-400'\n : 'text-red-600 dark:text-red-400'\n }`}\n >\n <ArrowRightStartOnRectangleIcon className=\"h-4 w-4 shrink-0\" />\n {resolvedLabels.signOut}\n </button>\n )}\n </Menu.Item>\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n\n {/* Sign-out confirmation */}\n <DynamicIslandConfirm\n open={confirmSignOut}\n onClose={handleSignOutCancel}\n onConfirm={handleSignOutConfirm}\n title={resolvedLabels.signOutConfirmTitle}\n confirmLabel={resolvedLabels.signOutConfirmButton}\n cancelLabel={resolvedLabels.signOutCancelButton}\n />\n </>\n )\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, S3WriteNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.mjs';
|
|
1
|
+
import { AgentConfig, AnswerNodeConfig, CodeNodeConfig, DashboardOutputNodeConfig, DocumentExtractorNodeConfig, EndNodeConfig, EntityNodeConfig, GroupNodeConfig, HttpRequestNodeConfig, IfElseNodeConfig, IterationNodeConfig, IterationStartNodeConfig, KnowledgeBaseNodeConfig, ListOperatorNodeConfig, ModelProviderNodeConfig, NoteNodeConfig, ParameterExtractorNodeConfig, QuestionClassifierNodeConfig, AgentRule, RuleNodeConfig, S3WriteNodeConfig, StartNodeConfig, TemplateTransformNodeConfig, WorkflowTool, VariableAggregatorNodeConfig, VariableAssignerNodeConfig } from './astrlabe/contracts.mjs';
|
|
2
2
|
|
|
3
3
|
type WorkflowCardDisplayMode = 'detailed' | 'compact';
|
|
4
4
|
type WorkflowEntityDefinition = {
|
|
@@ -91,6 +91,13 @@ type EndNodeData = {
|
|
|
91
91
|
onDelete?: (nodeId: string) => void;
|
|
92
92
|
onEdit?: (nodeId: string) => void;
|
|
93
93
|
};
|
|
94
|
+
type DashboardOutputNodeData = {
|
|
95
|
+
config: DashboardOutputNodeConfig;
|
|
96
|
+
label: string;
|
|
97
|
+
displayMode?: WorkflowCardDisplayMode;
|
|
98
|
+
onDelete?: (nodeId: string) => void;
|
|
99
|
+
onEdit?: (nodeId: string) => void;
|
|
100
|
+
};
|
|
94
101
|
type IfElseNodeData = {
|
|
95
102
|
config: IfElseNodeConfig;
|
|
96
103
|
label: string;
|
|
@@ -212,4 +219,4 @@ type GroupNodeData = {
|
|
|
212
219
|
onRemoveFromCanvas?: (nodeId: string) => void;
|
|
213
220
|
};
|
|
214
221
|
|
|
215
|
-
export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, S3WriteNodeData as c, TemplateTransformNodeData as d, IterationNodeData as e, AnswerNodeData as f, VariableAggregatorNodeData as g, IterationStartNodeData as h, AgentNodeTool as i };
|
|
222
|
+
export type { AgentWithPrompts as A, CodeNodeData as C, DocumentExtractorNodeData as D, EntityNodeData as E, GroupNodeData as G, HttpRequestNodeData as H, IfElseNodeData as I, KnowledgeBaseNodeData as K, ListOperatorNodeData as L, ModelProviderNodeData as M, NoteNodeData as N, ParameterExtractorNodeData as P, QuestionClassifierNodeData as Q, RuleNodeData as R, StartNodeData as S, ToolCanvasData as T, VariableAssignerNodeData as V, WorkflowEntityDefinition as W, AgentNodeData as a, EndNodeData as b, S3WriteNodeData as c, TemplateTransformNodeData as d, IterationNodeData as e, AnswerNodeData as f, VariableAggregatorNodeData as g, IterationStartNodeData as h, AgentNodeTool as i, DashboardOutputNodeData as j };
|