@aiquants/contact-map 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +130 -0
- package/dist/client.d.mts +399 -0
- package/dist/client.d.ts +399 -0
- package/dist/client.js +2 -0
- package/dist/client.mjs +2 -0
- package/dist/index.d.mts +267 -0
- package/dist/index.d.ts +267 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +1 -0
- package/dist/server.d.mts +89 -0
- package/dist/server.d.ts +89 -0
- package/dist/server.js +4 -0
- package/dist/server.mjs +4 -0
- package/dist/styles/contact-map.standalone.css +3 -0
- package/dist/tree-types-Dl6iBQze.d.mts +37 -0
- package/dist/tree-types-Dl6iBQze.d.ts +37 -0
- package/dist/wire-BxEK32O0.d.mts +148 -0
- package/dist/wire-BxEK32O0.d.ts +148 -0
- package/dist/worker/treeWorker.mjs +1 -0
- package/package.json +132 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { d as ContactMapLogger, C as ContactRecord, h as StreamCursor } from "./wire-BxEK32O0.mjs";
|
|
2
|
+
import { AnyMsSqlColumn, mssqlSchema } from "drizzle-orm/mssql-core";
|
|
3
|
+
interface ContactRecordTable {
|
|
4
|
+
person_id: AnyMsSqlColumn;
|
|
5
|
+
person_id_redirect_to?: AnyMsSqlColumn;
|
|
6
|
+
full_name: AnyMsSqlColumn;
|
|
7
|
+
full_name_reading?: AnyMsSqlColumn;
|
|
8
|
+
company_name: AnyMsSqlColumn;
|
|
9
|
+
company_name_reading?: AnyMsSqlColumn;
|
|
10
|
+
department: AnyMsSqlColumn;
|
|
11
|
+
title: AnyMsSqlColumn;
|
|
12
|
+
address?: AnyMsSqlColumn;
|
|
13
|
+
postal_code?: AnyMsSqlColumn;
|
|
14
|
+
email?: AnyMsSqlColumn;
|
|
15
|
+
custom_email?: AnyMsSqlColumn;
|
|
16
|
+
company_phone_number?: AnyMsSqlColumn;
|
|
17
|
+
custom_company_phone_number?: AnyMsSqlColumn;
|
|
18
|
+
company_fax_number?: AnyMsSqlColumn;
|
|
19
|
+
mobile_phone_number?: AnyMsSqlColumn;
|
|
20
|
+
custom_mobile_phone_number?: AnyMsSqlColumn;
|
|
21
|
+
url?: AnyMsSqlColumn;
|
|
22
|
+
contacted_at: AnyMsSqlColumn;
|
|
23
|
+
contacted_by?: AnyMsSqlColumn;
|
|
24
|
+
is_in_eight?: AnyMsSqlColumn;
|
|
25
|
+
is_contact_synced?: AnyMsSqlColumn;
|
|
26
|
+
is_active: AnyMsSqlColumn;
|
|
27
|
+
is_incomplete?: AnyMsSqlColumn;
|
|
28
|
+
created_at?: AnyMsSqlColumn;
|
|
29
|
+
created_by?: AnyMsSqlColumn;
|
|
30
|
+
updated_at?: AnyMsSqlColumn;
|
|
31
|
+
updated_by?: AnyMsSqlColumn;
|
|
32
|
+
}
|
|
33
|
+
interface ContactMapAuthResult {
|
|
34
|
+
user?: {
|
|
35
|
+
id?: string | number;
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
} | null;
|
|
38
|
+
cookie?: string;
|
|
39
|
+
}
|
|
40
|
+
interface ContactMapAuthenticate {
|
|
41
|
+
(request: Request, options: {
|
|
42
|
+
failureRedirect: string;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
user: unknown;
|
|
45
|
+
cookie?: string;
|
|
46
|
+
}>;
|
|
47
|
+
(request: Request, options: {
|
|
48
|
+
failureRedirect: null;
|
|
49
|
+
}): Promise<ContactMapAuthResult>;
|
|
50
|
+
}
|
|
51
|
+
interface QueryOptions {
|
|
52
|
+
signal?: AbortSignal;
|
|
53
|
+
}
|
|
54
|
+
interface ContactMapServerConfig {
|
|
55
|
+
db: any;
|
|
56
|
+
table?: any;
|
|
57
|
+
ensureConnection?: () => Promise<void>;
|
|
58
|
+
authenticate?: ContactMapAuthenticate;
|
|
59
|
+
logger?: ContactMapLogger;
|
|
60
|
+
firstBatchSize?: number;
|
|
61
|
+
nextBatchSize?: number;
|
|
62
|
+
streamErrorClientMessage?: string;
|
|
63
|
+
}
|
|
64
|
+
type ContactMapServerPorts = ContactMapServerConfig;
|
|
65
|
+
declare const DEFAULT_STREAM_CHUNK_SIZE = 200;
|
|
66
|
+
declare function countActiveContactsQuery(db: any, table: any, ensureConnection?: () => Promise<void>, options?: QueryOptions): Promise<number>;
|
|
67
|
+
type StreamChunkResult = {
|
|
68
|
+
records: ContactRecord[];
|
|
69
|
+
nextCursor: StreamCursor | null;
|
|
70
|
+
isLast: boolean;
|
|
71
|
+
};
|
|
72
|
+
declare function getContactsStreamChunkQuery(db: any, table: any, cursor?: StreamCursor | null, limit?: number, ensureConnection?: () => Promise<void>, options?: QueryOptions): Promise<StreamChunkResult>;
|
|
73
|
+
declare const DEFAULT_STREAM_ERROR_CLIENT_MESSAGE = "stream interrupted by server error";
|
|
74
|
+
declare function createContactMapStreamHandler(config: ContactMapServerConfig): (args: Request | {
|
|
75
|
+
request: Request;
|
|
76
|
+
}) => Promise<Response>;
|
|
77
|
+
declare function createContactMapServer(config: ContactMapServerConfig): {
|
|
78
|
+
streamLoader: (args: Request | {
|
|
79
|
+
request: Request;
|
|
80
|
+
}) => Promise<Response>;
|
|
81
|
+
countActiveContacts: (options?: {
|
|
82
|
+
signal?: AbortSignal;
|
|
83
|
+
}) => Promise<number>;
|
|
84
|
+
getContactsStreamChunk: (cursor?: StreamCursor | null, limit?: number, options?: {
|
|
85
|
+
signal?: AbortSignal;
|
|
86
|
+
}) => Promise<StreamChunkResult>;
|
|
87
|
+
};
|
|
88
|
+
declare function defineContactMapTable(schema: Pick<ReturnType<typeof mssqlSchema>, "table">, tableName: string): ContactRecordTable;
|
|
89
|
+
export { type ContactMapAuthResult, type ContactMapAuthenticate, type ContactMapServerConfig, type ContactMapServerPorts, type ContactRecordTable, DEFAULT_STREAM_CHUNK_SIZE, DEFAULT_STREAM_ERROR_CLIENT_MESSAGE, type QueryOptions, type StreamChunkResult, countActiveContactsQuery, createContactMapServer, createContactMapStreamHandler, defineContactMapTable, getContactsStreamChunkQuery };
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { d as ContactMapLogger, C as ContactRecord, h as StreamCursor } from "./wire-BxEK32O0.js";
|
|
2
|
+
import { AnyMsSqlColumn, mssqlSchema } from "drizzle-orm/mssql-core";
|
|
3
|
+
interface ContactRecordTable {
|
|
4
|
+
person_id: AnyMsSqlColumn;
|
|
5
|
+
person_id_redirect_to?: AnyMsSqlColumn;
|
|
6
|
+
full_name: AnyMsSqlColumn;
|
|
7
|
+
full_name_reading?: AnyMsSqlColumn;
|
|
8
|
+
company_name: AnyMsSqlColumn;
|
|
9
|
+
company_name_reading?: AnyMsSqlColumn;
|
|
10
|
+
department: AnyMsSqlColumn;
|
|
11
|
+
title: AnyMsSqlColumn;
|
|
12
|
+
address?: AnyMsSqlColumn;
|
|
13
|
+
postal_code?: AnyMsSqlColumn;
|
|
14
|
+
email?: AnyMsSqlColumn;
|
|
15
|
+
custom_email?: AnyMsSqlColumn;
|
|
16
|
+
company_phone_number?: AnyMsSqlColumn;
|
|
17
|
+
custom_company_phone_number?: AnyMsSqlColumn;
|
|
18
|
+
company_fax_number?: AnyMsSqlColumn;
|
|
19
|
+
mobile_phone_number?: AnyMsSqlColumn;
|
|
20
|
+
custom_mobile_phone_number?: AnyMsSqlColumn;
|
|
21
|
+
url?: AnyMsSqlColumn;
|
|
22
|
+
contacted_at: AnyMsSqlColumn;
|
|
23
|
+
contacted_by?: AnyMsSqlColumn;
|
|
24
|
+
is_in_eight?: AnyMsSqlColumn;
|
|
25
|
+
is_contact_synced?: AnyMsSqlColumn;
|
|
26
|
+
is_active: AnyMsSqlColumn;
|
|
27
|
+
is_incomplete?: AnyMsSqlColumn;
|
|
28
|
+
created_at?: AnyMsSqlColumn;
|
|
29
|
+
created_by?: AnyMsSqlColumn;
|
|
30
|
+
updated_at?: AnyMsSqlColumn;
|
|
31
|
+
updated_by?: AnyMsSqlColumn;
|
|
32
|
+
}
|
|
33
|
+
interface ContactMapAuthResult {
|
|
34
|
+
user?: {
|
|
35
|
+
id?: string | number;
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
} | null;
|
|
38
|
+
cookie?: string;
|
|
39
|
+
}
|
|
40
|
+
interface ContactMapAuthenticate {
|
|
41
|
+
(request: Request, options: {
|
|
42
|
+
failureRedirect: string;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
user: unknown;
|
|
45
|
+
cookie?: string;
|
|
46
|
+
}>;
|
|
47
|
+
(request: Request, options: {
|
|
48
|
+
failureRedirect: null;
|
|
49
|
+
}): Promise<ContactMapAuthResult>;
|
|
50
|
+
}
|
|
51
|
+
interface QueryOptions {
|
|
52
|
+
signal?: AbortSignal;
|
|
53
|
+
}
|
|
54
|
+
interface ContactMapServerConfig {
|
|
55
|
+
db: any;
|
|
56
|
+
table?: any;
|
|
57
|
+
ensureConnection?: () => Promise<void>;
|
|
58
|
+
authenticate?: ContactMapAuthenticate;
|
|
59
|
+
logger?: ContactMapLogger;
|
|
60
|
+
firstBatchSize?: number;
|
|
61
|
+
nextBatchSize?: number;
|
|
62
|
+
streamErrorClientMessage?: string;
|
|
63
|
+
}
|
|
64
|
+
type ContactMapServerPorts = ContactMapServerConfig;
|
|
65
|
+
declare const DEFAULT_STREAM_CHUNK_SIZE = 200;
|
|
66
|
+
declare function countActiveContactsQuery(db: any, table: any, ensureConnection?: () => Promise<void>, options?: QueryOptions): Promise<number>;
|
|
67
|
+
type StreamChunkResult = {
|
|
68
|
+
records: ContactRecord[];
|
|
69
|
+
nextCursor: StreamCursor | null;
|
|
70
|
+
isLast: boolean;
|
|
71
|
+
};
|
|
72
|
+
declare function getContactsStreamChunkQuery(db: any, table: any, cursor?: StreamCursor | null, limit?: number, ensureConnection?: () => Promise<void>, options?: QueryOptions): Promise<StreamChunkResult>;
|
|
73
|
+
declare const DEFAULT_STREAM_ERROR_CLIENT_MESSAGE = "stream interrupted by server error";
|
|
74
|
+
declare function createContactMapStreamHandler(config: ContactMapServerConfig): (args: Request | {
|
|
75
|
+
request: Request;
|
|
76
|
+
}) => Promise<Response>;
|
|
77
|
+
declare function createContactMapServer(config: ContactMapServerConfig): {
|
|
78
|
+
streamLoader: (args: Request | {
|
|
79
|
+
request: Request;
|
|
80
|
+
}) => Promise<Response>;
|
|
81
|
+
countActiveContacts: (options?: {
|
|
82
|
+
signal?: AbortSignal;
|
|
83
|
+
}) => Promise<number>;
|
|
84
|
+
getContactsStreamChunk: (cursor?: StreamCursor | null, limit?: number, options?: {
|
|
85
|
+
signal?: AbortSignal;
|
|
86
|
+
}) => Promise<StreamChunkResult>;
|
|
87
|
+
};
|
|
88
|
+
declare function defineContactMapTable(schema: Pick<ReturnType<typeof mssqlSchema>, "table">, tableName: string): ContactRecordTable;
|
|
89
|
+
export { type ContactMapAuthResult, type ContactMapAuthenticate, type ContactMapServerConfig, type ContactMapServerPorts, type ContactRecordTable, DEFAULT_STREAM_CHUNK_SIZE, DEFAULT_STREAM_ERROR_CLIENT_MESSAGE, type QueryOptions, type StreamChunkResult, countActiveContactsQuery, createContactMapServer, createContactMapStreamHandler, defineContactMapTable, getContactsStreamChunkQuery };
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";var T=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var U=(r,e)=>{for(var o in e)T(r,o,{get:e[o],enumerable:!0})},$=(r,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of I(e))!D.call(r,s)&&s!==o&&T(r,s,{get:()=>e[s],enumerable:!(a=q(e,s))||a.enumerable});return r};var Q=r=>$(T({},"__esModule",{value:!0}),r);var Z={};U(Z,{DEFAULT_STREAM_CHUNK_SIZE:()=>v,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE:()=>M,countActiveContactsQuery:()=>S,createContactMapServer:()=>z,createContactMapStreamHandler:()=>L,defineContactMapTable:()=>H,getContactsStreamChunkQuery:()=>w});module.exports=Q(Z);var E={info:(r,...e)=>console.info(`[contact-map] ${r}`,...e),warn:(r,...e)=>console.warn(`[contact-map] ${r}`,...e),error:(r,...e)=>console.error(`[contact-map] ${r}`,...e)};var n=require("drizzle-orm"),v=200;async function S(r,e,o,a){if(a?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");if(o&&await o(),a?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");return(await r.select({count:n.sql`count(*)`}).from(e).where((0,n.eq)(e.is_active,!0)))[0]?.count??0}async function w(r,e,o=null,a=v,s,u){if(u?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");if(s&&await s(),u?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");let p=(0,n.eq)(e.is_active,!0),h=p;if(o){let{contacted_at:y,person_id:g}=o;if(y!==null){let d=n.sql`CAST(${y.slice(0,23)} AS datetime2(3))`,b=(0,n.and)(p,(0,n.or)((0,n.lt)(e.contacted_at,d),(0,n.and)((0,n.eq)(e.contacted_at,d),(0,n.lt)(e.person_id,g)),(0,n.isNull)(e.contacted_at)));b&&(h=b)}else{let d=(0,n.and)(p,(0,n.isNull)(e.contacted_at),(0,n.lt)(e.person_id,g));d&&(h=d)}}let _=await r.select().from(e).where(h).orderBy((0,n.desc)(e.contacted_at),(0,n.desc)(e.person_id)).offset(0).fetch(a);if(u?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");let l=_.length>0?_[_.length-1]:null,f=l?{contacted_at:l.contacted_at?new Date(l.contacted_at).toISOString():null,person_id:l.person_id}:null,C=_.length<a;return{records:_,nextCursor:f,isLast:C}}var F=100,W=300,M="stream interrupted by server error",B=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;function j(r){let e=r.get("cursor_person_id"),o=r.get("cursor_contacted_at");if(e===null)return o!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let a=Number.parseInt(e,10);return Number.isSafeInteger(a)?o===null?{ok:!0,cursor:{contacted_at:null,person_id:a}}:B.test(o)?{ok:!0,cursor:{contacted_at:o,person_id:a}}:{ok:!1,message:`Invalid cursor_contacted_at: ${o}`}:{ok:!1,message:`Invalid cursor_person_id: ${e}`}}function L(r){let{db:e,table:o,ensureConnection:a,authenticate:s,logger:u=E,firstBatchSize:p=F,nextBatchSize:h=W,streamErrorClientMessage:_=M}=r;return async l=>{let f=l instanceof Request?l:l.request,C;if(s){let i;try{let c=await s(f,{failureRedirect:null});i=c.user,C=c.cookie}catch(c){return u.error("Authentication infrastructure error:",c),Response.json({error:"\u8A8D\u8A3C\u51E6\u7406\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002"},{status:500})}if(!i)return Response.json({error:"Unauthorized"},{status:401,headers:C?{"Set-Cookie":C}:void 0})}let y=new URL(f.url),g=j(y.searchParams);if(!g.ok)return Response.json({error:g.message},{status:400});let d=g.cursor,b=p,x=!0,k=null,R=new TextEncoder,m=new AbortController;f.signal.aborted?m.abort():f.signal.addEventListener("abort",()=>{m.abort()},{once:!0});let N=new ReadableStream({async pull(i){if(m.signal.aborted||f.signal.aborted){i.close();return}try{let c=await w(e,o,d,b,a,{signal:m.signal});b=h;let P={records:c.records,nextCursor:c.nextCursor,isLast:c.isLast};if(x&&(x=!1,k=S(e,o,a,{signal:m.signal}).then(A=>{if(!m.signal.aborted)try{let O={type:"METADATA",total:A};i.enqueue(R.encode(`${JSON.stringify(O)}
|
|
2
|
+
`))}catch{}}).catch(A=>{u.warn("Non-blocking countActiveContacts failed:",A)})),i.enqueue(R.encode(`${JSON.stringify(P)}
|
|
3
|
+
`)),c.isLast||!c.nextCursor){k&&await k,i.close();return}d=c.nextCursor}catch(c){if(m.signal.aborted){try{i.close()}catch{}return}u.error("Streaming error during chunk fetch:",c);try{i.enqueue(R.encode(`${JSON.stringify({error:_})}
|
|
4
|
+
`)),i.close()}catch{}}},cancel(){m.abort()}});return new Response(N,{headers:{"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-cache, no-transform","X-Content-Type-Options":"nosniff"}})}}function z(r){return{streamLoader:L(r),countActiveContacts:s=>S(r.db,r.table,r.ensureConnection,s),getContactsStreamChunk:(s=null,u,p)=>w(r.db,r.table,s,u,r.ensureConnection,p)}}var t=require("drizzle-orm/mssql-core");function H(r,e){return r.table(e,{person_id:(0,t.bigint)("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:(0,t.bigint)("person_id_redirect_to",{mode:"number"}),full_name:(0,t.nvarchar)("full_name",{length:1e3}),full_name_reading:(0,t.nvarchar)("full_name_reading",{length:1e3}),company_name:(0,t.nvarchar)("company_name",{length:1e3}),company_name_reading:(0,t.nvarchar)("company_name_reading",{length:1e3}),department:(0,t.nvarchar)("department",{length:1e3}),title:(0,t.nvarchar)("title",{length:1e3}),address:(0,t.nvarchar)("address",{length:1e3}),postal_code:(0,t.nvarchar)("postal_code",{length:100}),email:(0,t.nvarchar)("email",{length:100}),custom_email:(0,t.nvarchar)("custom_email",{length:100}),company_phone_number:(0,t.nvarchar)("company_phone_number",{length:100}),custom_company_phone_number:(0,t.nvarchar)("custom_company_phone_number",{length:100}),company_fax_number:(0,t.nvarchar)("company_fax_number",{length:100}),mobile_phone_number:(0,t.nvarchar)("mobile_phone_number",{length:100}),custom_mobile_phone_number:(0,t.nvarchar)("custom_mobile_phone_number",{length:100}),url:(0,t.nvarchar)("url",{length:100}),contacted_at:(0,t.datetime2)("contacted_at",{precision:7}),contacted_by:(0,t.nvarchar)("contacted_by",{length:100}),is_in_eight:(0,t.bit)("is_in_eight").default(!0).notNull(),is_contact_synced:(0,t.bit)("is_contact_synced").default(!1).notNull(),is_active:(0,t.bit)("is_active").default(!0).notNull(),is_incomplete:(0,t.bit)("is_incomplete").default(!1).notNull(),created_at:(0,t.datetime2)("created_at",{precision:7}),created_by:(0,t.nvarchar)("created_by",{length:50}),updated_at:(0,t.datetime2)("updated_at",{precision:7}),updated_by:(0,t.nvarchar)("updated_by",{length:50})},o=>[(0,t.primaryKey)({columns:[o.person_id]})])}0&&(module.exports={DEFAULT_STREAM_CHUNK_SIZE,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,countActiveContactsQuery,createContactMapServer,createContactMapStreamHandler,defineContactMapTable,getContactsStreamChunkQuery});
|
package/dist/server.mjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var L={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};import{and as R,desc as N,eq as T,isNull as P,lt as A,or as $,sql as O}from"drizzle-orm";var Q=200;async function x(t,e,n,o){if(o?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");if(n&&await n(),o?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");return(await t.select({count:O`count(*)`}).from(e).where(T(e.is_active,!0)))[0]?.count??0}async function E(t,e,n=null,o=Q,s,i){if(i?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");if(s&&await s(),i?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");let m=T(e.is_active,!0),g=m;if(n){let{contacted_at:b,person_id:f}=n;if(b!==null){let l=O`CAST(${b.slice(0,23)} AS datetime2(3))`,C=R(m,$(A(e.contacted_at,l),R(T(e.contacted_at,l),A(e.person_id,f)),P(e.contacted_at)));C&&(g=C)}else{let l=R(m,P(e.contacted_at),A(e.person_id,f));l&&(g=l)}}let p=await t.select().from(e).where(g).orderBy(N(e.contacted_at),N(e.person_id)).offset(0).fetch(o);if(i?.signal?.aborted)throw new DOMException("The operation was aborted","AbortError");let u=p.length>0?p[p.length-1]:null,_=u?{contacted_at:u.contacted_at?new Date(u.contacted_at).toISOString():null,person_id:u.person_id}:null,h=p.length<o;return{records:p,nextCursor:_,isLast:h}}var F=100,W=300,B="stream interrupted by server error",j=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;function z(t){let e=t.get("cursor_person_id"),n=t.get("cursor_contacted_at");if(e===null)return n!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let o=Number.parseInt(e,10);return Number.isSafeInteger(o)?n===null?{ok:!0,cursor:{contacted_at:null,person_id:o}}:j.test(n)?{ok:!0,cursor:{contacted_at:n,person_id:o}}:{ok:!1,message:`Invalid cursor_contacted_at: ${n}`}:{ok:!1,message:`Invalid cursor_person_id: ${e}`}}function H(t){let{db:e,table:n,ensureConnection:o,authenticate:s,logger:i=L,firstBatchSize:m=F,nextBatchSize:g=W,streamErrorClientMessage:p=B}=t;return async u=>{let _=u instanceof Request?u:u.request,h;if(s){let c;try{let a=await s(_,{failureRedirect:null});c=a.user,h=a.cookie}catch(a){return i.error("Authentication infrastructure error:",a),Response.json({error:"\u8A8D\u8A3C\u51E6\u7406\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002"},{status:500})}if(!c)return Response.json({error:"Unauthorized"},{status:401,headers:h?{"Set-Cookie":h}:void 0})}let b=new URL(_.url),f=z(b.searchParams);if(!f.ok)return Response.json({error:f.message},{status:400});let l=f.cursor,C=m,M=!0,S=null,w=new TextEncoder,d=new AbortController;_.signal.aborted?d.abort():_.signal.addEventListener("abort",()=>{d.abort()},{once:!0});let I=new ReadableStream({async pull(c){if(d.signal.aborted||_.signal.aborted){c.close();return}try{let a=await E(e,n,l,C,o,{signal:d.signal});C=g;let D={records:a.records,nextCursor:a.nextCursor,isLast:a.isLast};if(M&&(M=!1,S=x(e,n,o,{signal:d.signal}).then(k=>{if(!d.signal.aborted)try{let U={type:"METADATA",total:k};c.enqueue(w.encode(`${JSON.stringify(U)}
|
|
2
|
+
`))}catch{}}).catch(k=>{i.warn("Non-blocking countActiveContacts failed:",k)})),c.enqueue(w.encode(`${JSON.stringify(D)}
|
|
3
|
+
`)),a.isLast||!a.nextCursor){S&&await S,c.close();return}l=a.nextCursor}catch(a){if(d.signal.aborted){try{c.close()}catch{}return}i.error("Streaming error during chunk fetch:",a);try{c.enqueue(w.encode(`${JSON.stringify({error:p})}
|
|
4
|
+
`)),c.close()}catch{}}},cancel(){d.abort()}});return new Response(I,{headers:{"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-cache, no-transform","X-Content-Type-Options":"nosniff"}})}}function Y(t){return{streamLoader:H(t),countActiveContacts:s=>x(t.db,t.table,t.ensureConnection,s),getContactsStreamChunk:(s=null,i,m)=>E(t.db,t.table,s,i,t.ensureConnection,m)}}import{bigint as q,bit as y,datetime2 as v,nvarchar as r,primaryKey as Z}from"drizzle-orm/mssql-core";function re(t,e){return t.table(e,{person_id:q("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:q("person_id_redirect_to",{mode:"number"}),full_name:r("full_name",{length:1e3}),full_name_reading:r("full_name_reading",{length:1e3}),company_name:r("company_name",{length:1e3}),company_name_reading:r("company_name_reading",{length:1e3}),department:r("department",{length:1e3}),title:r("title",{length:1e3}),address:r("address",{length:1e3}),postal_code:r("postal_code",{length:100}),email:r("email",{length:100}),custom_email:r("custom_email",{length:100}),company_phone_number:r("company_phone_number",{length:100}),custom_company_phone_number:r("custom_company_phone_number",{length:100}),company_fax_number:r("company_fax_number",{length:100}),mobile_phone_number:r("mobile_phone_number",{length:100}),custom_mobile_phone_number:r("custom_mobile_phone_number",{length:100}),url:r("url",{length:100}),contacted_at:v("contacted_at",{precision:7}),contacted_by:r("contacted_by",{length:100}),is_in_eight:y("is_in_eight").default(!0).notNull(),is_contact_synced:y("is_contact_synced").default(!1).notNull(),is_active:y("is_active").default(!0).notNull(),is_incomplete:y("is_incomplete").default(!1).notNull(),created_at:v("created_at",{precision:7}),created_by:r("created_by",{length:50}),updated_at:v("updated_at",{precision:7}),updated_by:r("updated_by",{length:50})},n=>[Z({columns:[n.person_id]})])}export{Q as DEFAULT_STREAM_CHUNK_SIZE,B as DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,x as countActiveContactsQuery,Y as createContactMapServer,H as createContactMapStreamHandler,re as defineContactMapTable,E as getContactsStreamChunkQuery};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
|
|
2
|
+
/*! @aiquants/contact-map standalone CSS — 非 Tailwind ホスト専用。ホストの Tailwind ビルドと混在させないこと */
|
|
3
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-200:oklch(94.5% .129 101.54);--color-lime-300:oklch(89.7% .196 126.665);--color-lime-700:oklch(53.2% .157 131.589);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-200:oklch(91% .096 180.426);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-pink-200:oklch(89.9% .061 343.231);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-600:oklch(59.2% .249 .584);--color-pink-700:oklch(52.5% .223 3.958);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--radius-sm:calc(var(--radius,.5rem) - 4px);--radius-md:calc(var(--radius,.5rem) - 2px);--radius-lg:var(--radius,.5rem);--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-ring:hsl(var(--ring));--color-background:hsl(var(--background));--color-foreground:hsl(var(--foreground));--color-primary:hsl(var(--primary));--color-muted:hsl(var(--muted));--color-muted-foreground:hsl(var(--muted-foreground))}}@layer base,components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.z-50{z-index:50}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-\[64px\]{height:64px}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-40{min-height:calc(var(--spacing) * 40)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/3{width:33.3333%}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-28{width:calc(var(--spacing) * 28)}.w-full{width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-16{min-width:calc(var(--spacing) * 16)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-not-allowed{cursor:not-allowed}.touch-pan-x{--tw-pan-x:pan-x;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-manipulation{touch-action:manipulation}.resize{resize:both}.scrollbar-none{scrollbar-width:none}.scrollbar-thin{scrollbar-width:thin}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-400{border-color:var(--color-amber-400)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-500{border-color:var(--color-blue-500)}.border-cyan-200{border-color:var(--color-cyan-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-pink-200{border-color:var(--color-pink-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-300{border-color:var(--color-purple-300)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-teal-200{border-color:var(--color-teal-200)}.border-violet-200{border-color:var(--color-violet-200)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--color-muted)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-primary{background-color:var(--color-primary)}.bg-primary\/20{background-color:color-mix(in srgb, hsl(var(--primary)) 20%, transparent)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-purple-50\/60{background-color:#faf5ff99}@supports (color:color-mix(in lab, red, red)){.bg-purple-50\/60{background-color:color-mix(in oklab, var(--color-purple-50) 60%, transparent)}}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-500{background-color:var(--color-red-500)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-50\/70{background-color:#f0f9ffb3}@supports (color:color-mix(in lab, red, red)){.bg-sky-50\/70{background-color:color-mix(in oklab, var(--color-sky-50) 70%, transparent)}}.bg-sky-100\/55{background-color:#dff2fe8c}@supports (color:color-mix(in lab, red, red)){.bg-sky-100\/55{background-color:color-mix(in oklab, var(--color-sky-100) 55%, transparent)}}.bg-sky-100\/70{background-color:#dff2feb3}@supports (color:color-mix(in lab, red, red)){.bg-sky-100\/70{background-color:color-mix(in oklab, var(--color-sky-100) 70%, transparent)}}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-100\/70{background-color:#f1f5f9b3}@supports (color:color-mix(in lab, red, red)){.bg-slate-100\/70{background-color:color-mix(in oklab, var(--color-slate-100) 70%, transparent)}}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/50{background-color:color-mix(in oklab, var(--color-slate-900) 50%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/40{background-color:#fff6}@supports (color:color-mix(in lab, red, red)){.bg-white\/40{background-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}.bg-white\/60{background-color:#fff9}@supports (color:color-mix(in lab, red, red)){.bg-white\/60{background-color:color-mix(in oklab, var(--color-white) 60%, transparent)}}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-white\/70{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab, red, red)){.bg-white\/80{background-color:color-mix(in oklab, var(--color-white) 80%, transparent)}}.bg-yellow-200{background-color:var(--color-yellow-200)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pr-0\.75{padding-right:calc(var(--spacing) * .75)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-1{padding-left:calc(var(--spacing) * 1)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-1{--tw-leading:calc(var(--spacing) * 1);line-height:calc(var(--spacing) * 1)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-nowrap{text-wrap:nowrap}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-inherit{color:inherit}.text-lime-700{color:var(--color-lime-700)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-pink-600{color:var(--color-pink-600)}.text-pink-700{color:var(--color-pink-700)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-500{color:var(--color-sky-500)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[visibility\]{transition-property:visibility;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}@media (hover:hover){.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-green-200:hover{background-color:var(--color-green-200)}.hover\:bg-purple-200:hover{background-color:var(--color-purple-200)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-rose-100:hover{background-color:var(--color-rose-100)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200\/60:hover{background-color:#e2e8f099}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-200\/60:hover{background-color:color-mix(in oklab, var(--color-slate-200) 60%, transparent)}}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:underline:focus{text-decoration-line:underline}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-blue-200:focus-visible{--tw-ring-color:var(--color-blue-200)}.focus-visible\:ring-blue-500:focus-visible{--tw-ring-color:var(--color-blue-500)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--color-background)}.data-\[state\=active\]\:bg-white[data-state=active]{background-color:var(--color-white)}.data-\[state\=active\]\:text-blue-600[data-state=active]{color:var(--color-blue-600)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--color-foreground)}.data-\[state\=active\]\:shadow-2xs[data-state=active]{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[state\=inactive\]\:hidden[data-state=inactive]{display:none}@media (min-width:640px){.sm\:ml-2{margin-left:calc(var(--spacing) * 2)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:h-3\.5{height:calc(var(--spacing) * 3.5)}.sm\:w-3\.5{width:calc(var(--spacing) * 3.5)}.sm\:min-w-12{min-width:calc(var(--spacing) * 12)}.sm\:min-w-24{min-width:calc(var(--spacing) * 24)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:px-2{padding-inline:calc(var(--spacing) * 2)}.sm\:px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.sm\:py-0\.5{padding-block:calc(var(--spacing) * .5)}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.sm\:text-\[11px\]{font-size:11px}}@media (min-width:1280px){.xl\:flex{display:flex}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) auto}}@media (min-width:1536px){.\32 xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:border-amber-400\/60:where(.dark,.dark *){border-color:#fcbb0099}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-amber-400) 60%, transparent)}}.dark\:border-amber-500\/70:where(.dark,.dark *){border-color:#f99c00b3}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-500\/70:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-amber-500) 70%, transparent)}}.dark\:border-amber-800:where(.dark,.dark *){border-color:var(--color-amber-800)}.dark\:border-blue-400:where(.dark,.dark *){border-color:var(--color-blue-400)}.dark\:border-blue-400\/60:where(.dark,.dark *){border-color:#54a2ff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-blue-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-blue-400) 60%, transparent)}}.dark\:border-blue-500:where(.dark,.dark *){border-color:var(--color-blue-500)}.dark\:border-blue-500\/40:where(.dark,.dark *){border-color:#3080ff66}@supports (color:color-mix(in lab, red, red)){.dark\:border-blue-500\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-blue-500) 40%, transparent)}}.dark\:border-blue-500\/50:where(.dark,.dark *){border-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.dark\:border-blue-500\/50:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-blue-500) 50%, transparent)}}.dark\:border-blue-500\/60:where(.dark,.dark *){border-color:#3080ff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-blue-500\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-blue-500) 60%, transparent)}}.dark\:border-cyan-400\/60:where(.dark,.dark *){border-color:#00d2ef99}@supports (color:color-mix(in lab, red, red)){.dark\:border-cyan-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-cyan-400) 60%, transparent)}}.dark\:border-emerald-400\/60:where(.dark,.dark *){border-color:#00d29499}@supports (color:color-mix(in lab, red, red)){.dark\:border-emerald-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-emerald-400) 60%, transparent)}}.dark\:border-emerald-800:where(.dark,.dark *){border-color:var(--color-emerald-800)}.dark\:border-fuchsia-400\/60:where(.dark,.dark *){border-color:#ec6cff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-fuchsia-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-fuchsia-400) 60%, transparent)}}.dark\:border-green-400\/60:where(.dark,.dark *){border-color:#05df7299}@supports (color:color-mix(in lab, red, red)){.dark\:border-green-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-green-400) 60%, transparent)}}.dark\:border-indigo-400\/60:where(.dark,.dark *){border-color:#7d87ff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-400) 60%, transparent)}}.dark\:border-indigo-500\/60:where(.dark,.dark *){border-color:#625fff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-indigo-500\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-indigo-500) 60%, transparent)}}.dark\:border-pink-400\/60:where(.dark,.dark *){border-color:#fb64b699}@supports (color:color-mix(in lab, red, red)){.dark\:border-pink-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-pink-400) 60%, transparent)}}.dark\:border-purple-400\/60:where(.dark,.dark *){border-color:#c07eff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-purple-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-purple-400) 60%, transparent)}}.dark\:border-rose-400\/60:where(.dark,.dark *){border-color:#ff667f99}@supports (color:color-mix(in lab, red, red)){.dark\:border-rose-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-rose-400) 60%, transparent)}}.dark\:border-rose-700:where(.dark,.dark *){border-color:var(--color-rose-700)}.dark\:border-rose-800:where(.dark,.dark *){border-color:var(--color-rose-800)}.dark\:border-sky-400\/60:where(.dark,.dark *){border-color:#00bcfe99}@supports (color:color-mix(in lab, red, red)){.dark\:border-sky-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-sky-400) 60%, transparent)}}.dark\:border-sky-800:where(.dark,.dark *){border-color:var(--color-sky-800)}.dark\:border-slate-600:where(.dark,.dark *){border-color:var(--color-slate-600)}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-teal-400\/60:where(.dark,.dark *){border-color:#00d3bd99}@supports (color:color-mix(in lab, red, red)){.dark\:border-teal-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-teal-400) 60%, transparent)}}.dark\:border-transparent:where(.dark,.dark *){border-color:#0000}.dark\:border-violet-400\/60:where(.dark,.dark *){border-color:#a685ff99}@supports (color:color-mix(in lab, red, red)){.dark\:border-violet-400\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-violet-400) 60%, transparent)}}.dark\:bg-amber-300\/20:where(.dark,.dark *){background-color:#ffd23633}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-300\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-300) 20%, transparent)}}.dark\:bg-amber-950\/60:where(.dark,.dark *){background-color:#46190199}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 60%, transparent)}}.dark\:bg-blue-400:where(.dark,.dark *){background-color:var(--color-blue-400)}.dark\:bg-blue-500:where(.dark,.dark *){background-color:var(--color-blue-500)}.dark\:bg-blue-500\/20:where(.dark,.dark *){background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.dark\:bg-blue-800:where(.dark,.dark *){background-color:var(--color-blue-800)}.dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-900) 30%, transparent)}}.dark\:bg-blue-900\/40:where(.dark,.dark *){background-color:#1c398e66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-900) 40%, transparent)}}.dark\:bg-emerald-300\/20:where(.dark,.dark *){background-color:#5ee9b533}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-300\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-300) 20%, transparent)}}.dark\:bg-emerald-950\/60:where(.dark,.dark *){background-color:#002c2299}@supports (color:color-mix(in lab, red, red)){.dark\:bg-emerald-950\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-emerald-950) 60%, transparent)}}.dark\:bg-green-500:where(.dark,.dark *){background-color:var(--color-green-500)}.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:#0d542b33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 20%, transparent)}}.dark\:bg-orange-500:where(.dark,.dark *){background-color:var(--color-orange-500)}.dark\:bg-purple-500:where(.dark,.dark *){background-color:var(--color-purple-500)}.dark\:bg-purple-900\/20:where(.dark,.dark *){background-color:#59168b33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-900) 20%, transparent)}}.dark\:bg-rose-900\/30:where(.dark,.dark *){background-color:#8b08364d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-900) 30%, transparent)}}.dark\:bg-rose-900\/40:where(.dark,.dark *){background-color:#8b083666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-900) 40%, transparent)}}.dark\:bg-rose-950:where(.dark,.dark *){background-color:var(--color-rose-950)}.dark\:bg-rose-950\/60:where(.dark,.dark *){background-color:#4d021899}@supports (color:color-mix(in lab, red, red)){.dark\:bg-rose-950\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-rose-950) 60%, transparent)}}.dark\:bg-sky-900\/40:where(.dark,.dark *){background-color:#024a7066}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-900) 40%, transparent)}}.dark\:bg-sky-900\/55:where(.dark,.dark *){background-color:#024a708c}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-900\/55:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-900) 55%, transparent)}}.dark\:bg-sky-950\/60:where(.dark,.dark *){background-color:#052f4a99}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-950\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-950) 60%, transparent)}}.dark\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:#1d293d99}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 60%, transparent)}}.dark\:bg-slate-800\/70:where(.dark,.dark *){background-color:#1d293db3}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/70:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 70%, transparent)}}.dark\:bg-slate-800\/80:where(.dark,.dark *){background-color:#1d293dcc}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/80:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 80%, transparent)}}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:bg-slate-900\/40:where(.dark,.dark *){background-color:#0f172b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 40%, transparent)}}.dark\:bg-slate-900\/50:where(.dark,.dark *){background-color:#0f172b80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 50%, transparent)}}.dark\:bg-slate-900\/60:where(.dark,.dark *){background-color:#0f172b99}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 60%, transparent)}}.dark\:bg-slate-900\/70:where(.dark,.dark *){background-color:#0f172bb3}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/70:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 70%, transparent)}}.dark\:bg-slate-900\/80:where(.dark,.dark *){background-color:#0f172bcc}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-900\/80:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-900) 80%, transparent)}}.dark\:bg-slate-950:where(.dark,.dark *){background-color:var(--color-slate-950)}.dark\:text-amber-200:where(.dark,.dark *){color:var(--color-amber-200)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-blue-200:where(.dark,.dark *){color:var(--color-blue-200)}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-cyan-300:where(.dark,.dark *){color:var(--color-cyan-300)}.dark\:text-emerald-200:where(.dark,.dark *){color:var(--color-emerald-200)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-fuchsia-300:where(.dark,.dark *){color:var(--color-fuchsia-300)}.dark\:text-green-200:where(.dark,.dark *){color:var(--color-green-200)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-indigo-300:where(.dark,.dark *){color:var(--color-indigo-300)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-lime-300:where(.dark,.dark *){color:var(--color-lime-300)}.dark\:text-orange-300:where(.dark,.dark *){color:var(--color-orange-300)}.dark\:text-orange-400:where(.dark,.dark *){color:var(--color-orange-400)}.dark\:text-pink-300:where(.dark,.dark *){color:var(--color-pink-300)}.dark\:text-purple-200:where(.dark,.dark *){color:var(--color-purple-200)}.dark\:text-purple-300:where(.dark,.dark *){color:var(--color-purple-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-rose-200:where(.dark,.dark *){color:var(--color-rose-200)}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-sky-200:where(.dark,.dark *){color:var(--color-sky-200)}.dark\:text-sky-300:where(.dark,.dark *){color:var(--color-sky-300)}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}.dark\:text-slate-100:where(.dark,.dark *){color:var(--color-slate-100)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}.dark\:text-teal-300:where(.dark,.dark *){color:var(--color-teal-300)}.dark\:text-violet-300:where(.dark,.dark *){color:var(--color-violet-300)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.dark\:ring-1:where(.dark,.dark *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.dark\:shadow-blue-900\/30:where(.dark,.dark *){--tw-shadow-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.dark\:shadow-blue-900\/30:where(.dark,.dark *){--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-blue-900) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.dark\:shadow-slate-950\/40:where(.dark,.dark *){--tw-shadow-color:#02061866}@supports (color:color-mix(in lab, red, red)){.dark\:shadow-slate-950\/40:where(.dark,.dark *){--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-950) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.dark\:ring-blue-500\/40:where(.dark,.dark *){--tw-ring-color:#3080ff66}@supports (color:color-mix(in lab, red, red)){.dark\:ring-blue-500\/40:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 40%, transparent)}}.dark\:ring-white\/70:where(.dark,.dark *){--tw-ring-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.dark\:ring-white\/70:where(.dark,.dark *){--tw-ring-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}@media (hover:hover){.dark\:hover\:border-blue-400:where(.dark,.dark *):hover{border-color:var(--color-blue-400)}.dark\:hover\:bg-amber-300\/30:where(.dark,.dark *):hover{background-color:#ffd2364d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-amber-300\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-amber-300) 30%, transparent)}}.dark\:hover\:bg-blue-500\/10:where(.dark,.dark *):hover{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-blue-500\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-blue-500) 10%, transparent)}}.dark\:hover\:bg-blue-600:where(.dark,.dark *):hover{background-color:var(--color-blue-600)}.dark\:hover\:bg-green-800\/30:where(.dark,.dark *):hover{background-color:#0166304d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-green-800\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-green-800) 30%, transparent)}}.dark\:hover\:bg-purple-800\/30:where(.dark,.dark *):hover{background-color:#6e11b04d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-purple-800\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-purple-800) 30%, transparent)}}.dark\:hover\:bg-red-700:where(.dark,.dark *):hover{background-color:var(--color-red-700)}.dark\:hover\:bg-rose-900:where(.dark,.dark *):hover{background-color:var(--color-rose-900)}.dark\:hover\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\:hover\:bg-slate-700\/60:where(.dark,.dark *):hover{background-color:#31415899}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-700\/60:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.dark\:hover\:bg-slate-700\/70:where(.dark,.dark *):hover{background-color:#314158b3}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-700\/70:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-700) 70%, transparent)}}.dark\:hover\:bg-slate-800:where(.dark,.dark *):hover{background-color:var(--color-slate-800)}.dark\:hover\:bg-slate-800\/70:where(.dark,.dark *):hover{background-color:#1d293db3}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-800\/70:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-800) 70%, transparent)}}.dark\:hover\:text-blue-300:where(.dark,.dark *):hover{color:var(--color-blue-300)}.dark\:hover\:text-slate-100:where(.dark,.dark *):hover{color:var(--color-slate-100)}}.dark\:data-\[state\=active\]\:bg-slate-800:where(.dark,.dark *)[data-state=active]{background-color:var(--color-slate-800)}.dark\:data-\[state\=active\]\:text-sky-300:where(.dark,.dark *)[data-state=active]{color:var(--color-sky-300)}.dark\:data-\[state\=active\]\:text-slate-100:where(.dark,.dark *)[data-state=active]{color:var(--color-slate-100)}.\[\&_\.directory-tree-name\]\:text-sky-700 .directory-tree-name{color:var(--color-sky-700)}.dark\:\[\&_\.directory-tree-name\]\:text-sky-300:where(.dark,.dark *) .directory-tree-name{color:var(--color-sky-300)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0), var(--tw-enter-translate-y,0), 0) scale3d(var(--tw-enter-scale,1), var(--tw-enter-scale,1), var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0), var(--tw-exit-translate-y,0), 0) scale3d(var(--tw-exit-scale,1), var(--tw-exit-scale,1), var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
interface ResponsiveLayoutSpec {
|
|
2
|
+
readonly listPanelMinWidth: number;
|
|
3
|
+
readonly detailPanelMinWidth: number;
|
|
4
|
+
readonly handleThickness: number;
|
|
5
|
+
readonly listPaddingAndBorder: number;
|
|
6
|
+
readonly detailPaddingAndBorder: number;
|
|
7
|
+
readonly scrollbarSafetyBuffer: number;
|
|
8
|
+
readonly hysteresisSafetyMargin: number;
|
|
9
|
+
}
|
|
10
|
+
interface ResponsiveThresholds {
|
|
11
|
+
readonly physicalMinWidth: number;
|
|
12
|
+
readonly collapseThreshold: number;
|
|
13
|
+
readonly expandThreshold: number;
|
|
14
|
+
readonly hysteresisWidth: number;
|
|
15
|
+
}
|
|
16
|
+
declare const DEFAULT_LIST_LAYOUT_SPEC: ResponsiveLayoutSpec;
|
|
17
|
+
declare const DEFAULT_TREE_LAYOUT_SPEC: ResponsiveLayoutSpec;
|
|
18
|
+
declare function calculateResponsiveThresholds(spec: ResponsiveLayoutSpec): ResponsiveThresholds;
|
|
19
|
+
declare function getHysteresisBreakpointState(width: number, currentState: boolean, thresholds: Pick<ResponsiveThresholds, "collapseThreshold" | "expandThreshold">): boolean;
|
|
20
|
+
interface ContactMapDirectoryEntry {
|
|
21
|
+
name: string;
|
|
22
|
+
type: "directory" | "file";
|
|
23
|
+
absolutePath: string;
|
|
24
|
+
relativePath: string;
|
|
25
|
+
children?: ContactMapDirectoryEntry[];
|
|
26
|
+
personId?: number;
|
|
27
|
+
title?: string;
|
|
28
|
+
isPrimary?: boolean;
|
|
29
|
+
}
|
|
30
|
+
interface ContactRecordForTree {
|
|
31
|
+
person_id: number;
|
|
32
|
+
full_name: string | null;
|
|
33
|
+
company_name: string | null;
|
|
34
|
+
department: string | null;
|
|
35
|
+
title: string | null;
|
|
36
|
+
}
|
|
37
|
+
export { type ContactMapDirectoryEntry as C, DEFAULT_LIST_LAYOUT_SPEC as D, type ResponsiveLayoutSpec as R, type ResponsiveThresholds as a, type ContactRecordForTree as b, DEFAULT_TREE_LAYOUT_SPEC as c, calculateResponsiveThresholds as d, getHysteresisBreakpointState as g };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
interface ResponsiveLayoutSpec {
|
|
2
|
+
readonly listPanelMinWidth: number;
|
|
3
|
+
readonly detailPanelMinWidth: number;
|
|
4
|
+
readonly handleThickness: number;
|
|
5
|
+
readonly listPaddingAndBorder: number;
|
|
6
|
+
readonly detailPaddingAndBorder: number;
|
|
7
|
+
readonly scrollbarSafetyBuffer: number;
|
|
8
|
+
readonly hysteresisSafetyMargin: number;
|
|
9
|
+
}
|
|
10
|
+
interface ResponsiveThresholds {
|
|
11
|
+
readonly physicalMinWidth: number;
|
|
12
|
+
readonly collapseThreshold: number;
|
|
13
|
+
readonly expandThreshold: number;
|
|
14
|
+
readonly hysteresisWidth: number;
|
|
15
|
+
}
|
|
16
|
+
declare const DEFAULT_LIST_LAYOUT_SPEC: ResponsiveLayoutSpec;
|
|
17
|
+
declare const DEFAULT_TREE_LAYOUT_SPEC: ResponsiveLayoutSpec;
|
|
18
|
+
declare function calculateResponsiveThresholds(spec: ResponsiveLayoutSpec): ResponsiveThresholds;
|
|
19
|
+
declare function getHysteresisBreakpointState(width: number, currentState: boolean, thresholds: Pick<ResponsiveThresholds, "collapseThreshold" | "expandThreshold">): boolean;
|
|
20
|
+
interface ContactMapDirectoryEntry {
|
|
21
|
+
name: string;
|
|
22
|
+
type: "directory" | "file";
|
|
23
|
+
absolutePath: string;
|
|
24
|
+
relativePath: string;
|
|
25
|
+
children?: ContactMapDirectoryEntry[];
|
|
26
|
+
personId?: number;
|
|
27
|
+
title?: string;
|
|
28
|
+
isPrimary?: boolean;
|
|
29
|
+
}
|
|
30
|
+
interface ContactRecordForTree {
|
|
31
|
+
person_id: number;
|
|
32
|
+
full_name: string | null;
|
|
33
|
+
company_name: string | null;
|
|
34
|
+
department: string | null;
|
|
35
|
+
title: string | null;
|
|
36
|
+
}
|
|
37
|
+
export { type ContactMapDirectoryEntry as C, DEFAULT_LIST_LAYOUT_SPEC as D, type ResponsiveLayoutSpec as R, type ResponsiveThresholds as a, type ContactRecordForTree as b, DEFAULT_TREE_LAYOUT_SPEC as c, calculateResponsiveThresholds as d, getHysteresisBreakpointState as g };
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
interface ContactRecord {
|
|
2
|
+
person_id: number;
|
|
3
|
+
person_id_redirect_to?: number | null;
|
|
4
|
+
full_name: string | null;
|
|
5
|
+
full_name_reading?: string | null;
|
|
6
|
+
company_name: string | null;
|
|
7
|
+
company_name_reading?: string | null;
|
|
8
|
+
department: string | null;
|
|
9
|
+
title: string | null;
|
|
10
|
+
address?: string | null;
|
|
11
|
+
postal_code?: string | null;
|
|
12
|
+
email?: string | null;
|
|
13
|
+
custom_email?: string | null;
|
|
14
|
+
company_phone_number?: string | null;
|
|
15
|
+
custom_company_phone_number?: string | null;
|
|
16
|
+
company_fax_number?: string | null;
|
|
17
|
+
mobile_phone_number?: string | null;
|
|
18
|
+
custom_mobile_phone_number?: string | null;
|
|
19
|
+
url?: string | null;
|
|
20
|
+
contacted_at: string | Date | null;
|
|
21
|
+
contacted_by?: string | null;
|
|
22
|
+
is_in_eight?: boolean | null;
|
|
23
|
+
is_contact_synced?: boolean | null;
|
|
24
|
+
is_active: boolean;
|
|
25
|
+
is_incomplete?: boolean | null;
|
|
26
|
+
created_at?: string | Date;
|
|
27
|
+
created_by?: string;
|
|
28
|
+
updated_at?: string | Date;
|
|
29
|
+
updated_by?: string;
|
|
30
|
+
}
|
|
31
|
+
type ContactMapStreamPhase = "idle" | "streaming" | "retrying" | "complete" | "auth-required" | "failed";
|
|
32
|
+
interface ContactMapStreamState {
|
|
33
|
+
records: ContactRecord[];
|
|
34
|
+
loadedCount: number;
|
|
35
|
+
companyCount: number;
|
|
36
|
+
totalCount: number | null;
|
|
37
|
+
isLoading: boolean;
|
|
38
|
+
isComplete: boolean;
|
|
39
|
+
phase: ContactMapStreamPhase;
|
|
40
|
+
error: Error | null;
|
|
41
|
+
}
|
|
42
|
+
interface ContactMapOutletContext {
|
|
43
|
+
contactMapRecords: ContactRecord[];
|
|
44
|
+
isStreamingComplete: boolean;
|
|
45
|
+
isStreamingFailed: boolean;
|
|
46
|
+
streamPhase: ContactMapStreamPhase;
|
|
47
|
+
loadedCount: number;
|
|
48
|
+
companyCount: number;
|
|
49
|
+
totalCount: number | null;
|
|
50
|
+
errorMessage: string | null;
|
|
51
|
+
}
|
|
52
|
+
interface SearchResultEntry {
|
|
53
|
+
item: ContactRecord;
|
|
54
|
+
score?: number;
|
|
55
|
+
baseScore?: number;
|
|
56
|
+
matches?: Array<{
|
|
57
|
+
key: string;
|
|
58
|
+
indices: Array<[
|
|
59
|
+
number,
|
|
60
|
+
number
|
|
61
|
+
]>;
|
|
62
|
+
value?: string;
|
|
63
|
+
}>;
|
|
64
|
+
}
|
|
65
|
+
interface ContactMapSearchOutletContext {
|
|
66
|
+
contactMapRecords: ContactRecord[];
|
|
67
|
+
filteredItems: readonly SearchResultEntry[];
|
|
68
|
+
searchTerm: string;
|
|
69
|
+
isSearching: boolean;
|
|
70
|
+
isIndexBuilding: boolean;
|
|
71
|
+
isPending: boolean;
|
|
72
|
+
hasSearchTerm: boolean;
|
|
73
|
+
enableHighlighting: boolean;
|
|
74
|
+
openEmailsWithGmail: boolean;
|
|
75
|
+
isSearchInProgress: boolean;
|
|
76
|
+
isSearchTabActive: boolean;
|
|
77
|
+
errorMessage: string | null;
|
|
78
|
+
isStreamingComplete: boolean;
|
|
79
|
+
isStreamingFailed: boolean;
|
|
80
|
+
}
|
|
81
|
+
interface IndexWorkerMetrics {
|
|
82
|
+
totalIndexBuilds?: number;
|
|
83
|
+
currentDataSize?: number;
|
|
84
|
+
lastIndexTime?: number;
|
|
85
|
+
cacheSize?: {
|
|
86
|
+
ngram?: number;
|
|
87
|
+
word?: number;
|
|
88
|
+
phonetic?: number;
|
|
89
|
+
};
|
|
90
|
+
indexMetadata?: Record<string, unknown>;
|
|
91
|
+
}
|
|
92
|
+
interface LevenshteinWorkerMetrics {
|
|
93
|
+
totalCalculations?: number;
|
|
94
|
+
totalDistanceCalculations?: number;
|
|
95
|
+
averageDistance?: number;
|
|
96
|
+
minDistance?: number | string;
|
|
97
|
+
maxDistance?: number;
|
|
98
|
+
partialMatches?: number;
|
|
99
|
+
perfectMatches?: number;
|
|
100
|
+
similarityThresholds?: {
|
|
101
|
+
above80?: number;
|
|
102
|
+
above60?: number;
|
|
103
|
+
above40?: number;
|
|
104
|
+
below40?: number;
|
|
105
|
+
};
|
|
106
|
+
distanceDistribution?: Record<string, number>;
|
|
107
|
+
queryLengthStats?: Record<string, {
|
|
108
|
+
count: number;
|
|
109
|
+
averageScore: number;
|
|
110
|
+
}>;
|
|
111
|
+
earlyTerminations?: number;
|
|
112
|
+
}
|
|
113
|
+
interface FieldPerformanceMetric {
|
|
114
|
+
matchCount: number;
|
|
115
|
+
averageScore: number;
|
|
116
|
+
totalScore: number;
|
|
117
|
+
bestScore: number;
|
|
118
|
+
worstScore: number;
|
|
119
|
+
}
|
|
120
|
+
interface ContactMapLogger {
|
|
121
|
+
info(message: string, ...args: unknown[]): void;
|
|
122
|
+
warn(message: string, ...args: unknown[]): void;
|
|
123
|
+
error(message: string, ...args: unknown[]): void;
|
|
124
|
+
}
|
|
125
|
+
declare const defaultLogger: ContactMapLogger;
|
|
126
|
+
type StreamCursor = {
|
|
127
|
+
contacted_at: string | null;
|
|
128
|
+
person_id: number;
|
|
129
|
+
};
|
|
130
|
+
type JsonSerialized<T> = {
|
|
131
|
+
[K in keyof T]: T[K] extends Date ? string : T[K] extends Date | null ? string | null : T[K];
|
|
132
|
+
};
|
|
133
|
+
type SerializedContactStreamRow = JsonSerialized<ContactRecord>;
|
|
134
|
+
type StreamChunkWire = {
|
|
135
|
+
records: SerializedContactStreamRow[];
|
|
136
|
+
nextCursor: StreamCursor | null;
|
|
137
|
+
isLast: boolean;
|
|
138
|
+
total?: number;
|
|
139
|
+
};
|
|
140
|
+
type StreamMetadataWire = {
|
|
141
|
+
type: "METADATA";
|
|
142
|
+
total: number;
|
|
143
|
+
};
|
|
144
|
+
type StreamErrorWire = {
|
|
145
|
+
error: string;
|
|
146
|
+
};
|
|
147
|
+
type StreamLineWire = StreamChunkWire | StreamMetadataWire | StreamErrorWire;
|
|
148
|
+
export { type ContactRecord as C, type FieldPerformanceMetric as F, type IndexWorkerMetrics as I, type JsonSerialized as J, type LevenshteinWorkerMetrics as L, type SerializedContactStreamRow as S, type ContactMapStreamPhase as a, type ContactMapSearchOutletContext as b, type ContactMapOutletContext as c, type ContactMapLogger as d, type SearchResultEntry as e, type ContactMapStreamState as f, type StreamChunkWire as g, type StreamCursor as h, type StreamErrorWire as i, type StreamLineWire as j, type StreamMetadataWire as k, defaultLogger as l };
|