sa2kit 3.4.0 → 3.7.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/business/index.d.mts +2 -7
- package/dist/business/index.d.ts +2 -7
- package/dist/business/index.js +1761 -8045
- package/dist/business/index.js.map +1 -1
- package/dist/business/index.mjs +1169 -7452
- package/dist/business/index.mjs.map +1 -1
- package/dist/business/portfolio/index.d.mts +1 -2
- package/dist/business/portfolio/index.d.ts +1 -2
- package/dist/{chunk-KVYHCGRY.js → chunk-7Z3XR2Y4.js} +552 -263
- package/dist/chunk-7Z3XR2Y4.js.map +1 -0
- package/dist/chunk-XPY45Y75.js +1143 -0
- package/dist/chunk-XPY45Y75.js.map +1 -0
- package/dist/{chunk-YIRPPMCN.mjs → chunk-XSTMLLJV.mjs} +474 -198
- package/dist/chunk-XSTMLLJV.mjs.map +1 -0
- package/dist/chunk-ZJLS5JU5.mjs +1090 -0
- package/dist/chunk-ZJLS5JU5.mjs.map +1 -0
- package/dist/common/aiApi/client/index.d.mts +71 -0
- package/dist/common/aiApi/client/index.d.ts +71 -0
- package/dist/common/aiApi/client/index.js +165 -0
- package/dist/common/aiApi/client/index.js.map +1 -0
- package/dist/common/aiApi/client/index.mjs +151 -0
- package/dist/common/aiApi/client/index.mjs.map +1 -0
- package/dist/common/aiApi/index.d.mts +184 -0
- package/dist/common/aiApi/index.d.ts +184 -0
- package/dist/common/aiApi/index.js +217 -0
- package/dist/common/aiApi/index.mjs +4 -0
- package/dist/common/aiApi/server/index.d.mts +3 -0
- package/dist/common/aiApi/server/index.d.ts +3 -0
- package/dist/common/aiApi/server/index.js +217 -0
- package/dist/common/aiApi/server/index.mjs +4 -0
- package/dist/common/components/index.js +176 -177
- package/dist/common/components/index.mjs +1 -2
- package/dist/common/index.js +2 -3
- package/dist/common/index.mjs +1 -2
- package/dist/{index-BSmd4ikf.d.ts → index-B4wDXFL0.d.mts} +39 -2
- package/dist/{index-r2-zE3iC.d.mts → index-B4wDXFL0.d.ts} +39 -2
- package/dist/{index-DLLPTprx.d.mts → index-B9vXYzok.d.mts} +48 -13
- package/dist/{index-VFDbZxVM.d.ts → index-BZ0MhRau.d.ts} +48 -13
- package/dist/index.d.mts +703 -181
- package/dist/index.d.ts +703 -181
- package/dist/index.js +2921 -7257
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2161 -6538
- package/dist/index.mjs.map +1 -1
- package/dist/types-CiqMQ-uu.d.mts +166 -0
- package/dist/types-CiqMQ-uu.d.ts +166 -0
- package/package.json +15 -60
- package/dist/CollisionBalls-DgKtscU2.d.mts +0 -41
- package/dist/CollisionBalls-DgKtscU2.d.ts +0 -41
- package/dist/business/calendar/index.d.mts +0 -6
- package/dist/business/calendar/index.d.ts +0 -6
- package/dist/business/calendar/index.js +0 -7433
- package/dist/business/calendar/index.js.map +0 -1
- package/dist/business/calendar/index.mjs +0 -7257
- package/dist/business/calendar/index.mjs.map +0 -1
- package/dist/business/calendar/routes/index.d.mts +0 -191
- package/dist/business/calendar/routes/index.d.ts +0 -191
- package/dist/business/calendar/routes/index.js +0 -844
- package/dist/business/calendar/routes/index.js.map +0 -1
- package/dist/business/calendar/routes/index.mjs +0 -826
- package/dist/business/calendar/routes/index.mjs.map +0 -1
- package/dist/chunk-3R6JHA6D.js +0 -120
- package/dist/chunk-3R6JHA6D.js.map +0 -1
- package/dist/chunk-4PJM4752.js +0 -4
- package/dist/chunk-4PJM4752.js.map +0 -1
- package/dist/chunk-7PMT4L4I.js +0 -324
- package/dist/chunk-7PMT4L4I.js.map +0 -1
- package/dist/chunk-FY2X3LYR.mjs +0 -3
- package/dist/chunk-FY2X3LYR.mjs.map +0 -1
- package/dist/chunk-GS4SAW25.mjs +0 -116
- package/dist/chunk-GS4SAW25.mjs.map +0 -1
- package/dist/chunk-HL4H2HF6.js +0 -279
- package/dist/chunk-HL4H2HF6.js.map +0 -1
- package/dist/chunk-IJIQUMAK.mjs +0 -272
- package/dist/chunk-IJIQUMAK.mjs.map +0 -1
- package/dist/chunk-KVYHCGRY.js.map +0 -1
- package/dist/chunk-MMDSZIXD.mjs +0 -286
- package/dist/chunk-MMDSZIXD.mjs.map +0 -1
- package/dist/chunk-N2O3OX5Y.mjs +0 -243
- package/dist/chunk-N2O3OX5Y.mjs.map +0 -1
- package/dist/chunk-RRQ2X26Z.js +0 -106
- package/dist/chunk-RRQ2X26Z.js.map +0 -1
- package/dist/chunk-RVNQI6BI.js +0 -249
- package/dist/chunk-RVNQI6BI.js.map +0 -1
- package/dist/chunk-UJUWDF7M.mjs +0 -336
- package/dist/chunk-UJUWDF7M.mjs.map +0 -1
- package/dist/chunk-VCKXK6V5.js +0 -345
- package/dist/chunk-VCKXK6V5.js.map +0 -1
- package/dist/chunk-VIEXDTNF.mjs +0 -100
- package/dist/chunk-VIEXDTNF.mjs.map +0 -1
- package/dist/chunk-YIRPPMCN.mjs.map +0 -1
- package/dist/common/ai/llm/core/index.d.mts +0 -70
- package/dist/common/ai/llm/core/index.d.ts +0 -70
- package/dist/common/ai/llm/core/index.js +0 -54
- package/dist/common/ai/llm/core/index.mjs +0 -5
- package/dist/common/ai/llm/electron/index.d.mts +0 -6
- package/dist/common/ai/llm/electron/index.d.ts +0 -6
- package/dist/common/ai/llm/electron/index.js +0 -67
- package/dist/common/ai/llm/electron/index.mjs +0 -10
- package/dist/common/ai/llm/index.d.mts +0 -3
- package/dist/common/ai/llm/index.d.ts +0 -3
- package/dist/common/ai/llm/index.js +0 -54
- package/dist/common/ai/llm/index.js.map +0 -1
- package/dist/common/ai/llm/index.mjs +0 -5
- package/dist/common/ai/llm/index.mjs.map +0 -1
- package/dist/common/ai/llm/miniapp/index.d.mts +0 -6
- package/dist/common/ai/llm/miniapp/index.d.ts +0 -6
- package/dist/common/ai/llm/miniapp/index.js +0 -59
- package/dist/common/ai/llm/miniapp/index.js.map +0 -1
- package/dist/common/ai/llm/miniapp/index.mjs +0 -6
- package/dist/common/ai/llm/miniapp/index.mjs.map +0 -1
- package/dist/common/ai/llm/rn/index.d.mts +0 -6
- package/dist/common/ai/llm/rn/index.d.ts +0 -6
- package/dist/common/ai/llm/rn/index.js +0 -59
- package/dist/common/ai/llm/rn/index.js.map +0 -1
- package/dist/common/ai/llm/rn/index.mjs +0 -6
- package/dist/common/ai/llm/rn/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/electron/index.d.mts +0 -5
- package/dist/common/ai/llm/ui/electron/index.d.ts +0 -5
- package/dist/common/ai/llm/ui/electron/index.js +0 -22
- package/dist/common/ai/llm/ui/electron/index.js.map +0 -1
- package/dist/common/ai/llm/ui/electron/index.mjs +0 -9
- package/dist/common/ai/llm/ui/electron/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/miniapp/index.d.mts +0 -9
- package/dist/common/ai/llm/ui/miniapp/index.d.ts +0 -9
- package/dist/common/ai/llm/ui/miniapp/index.js +0 -14
- package/dist/common/ai/llm/ui/miniapp/index.js.map +0 -1
- package/dist/common/ai/llm/ui/miniapp/index.mjs +0 -5
- package/dist/common/ai/llm/ui/miniapp/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/rn/index.d.mts +0 -9
- package/dist/common/ai/llm/ui/rn/index.d.ts +0 -9
- package/dist/common/ai/llm/ui/rn/index.js +0 -14
- package/dist/common/ai/llm/ui/rn/index.js.map +0 -1
- package/dist/common/ai/llm/ui/rn/index.mjs +0 -5
- package/dist/common/ai/llm/ui/rn/index.mjs.map +0 -1
- package/dist/common/ai/llm/ui/web/index.d.mts +0 -15
- package/dist/common/ai/llm/ui/web/index.d.ts +0 -15
- package/dist/common/ai/llm/ui/web/index.js +0 -21
- package/dist/common/ai/llm/ui/web/index.js.map +0 -1
- package/dist/common/ai/llm/ui/web/index.mjs +0 -8
- package/dist/common/ai/llm/ui/web/index.mjs.map +0 -1
- package/dist/common/ai/llm/web/index.d.mts +0 -6
- package/dist/common/ai/llm/web/index.d.ts +0 -6
- package/dist/common/ai/llm/web/index.js +0 -66
- package/dist/common/ai/llm/web/index.js.map +0 -1
- package/dist/common/ai/llm/web/index.mjs +0 -9
- package/dist/common/ai/llm/web/index.mjs.map +0 -1
- package/dist/index-BMgdH5dL.d.mts +0 -1716
- package/dist/index-IXMAeTtN.d.ts +0 -1716
- package/dist/types-B2rs_jq1.d.mts +0 -38
- package/dist/types-DgACCUpT.d.ts +0 -122
- package/dist/types-DwS2Eg0q.d.ts +0 -38
- package/dist/types-LU_BGSzk.d.mts +0 -122
- /package/dist/common/{ai/llm/core → aiApi}/index.js.map +0 -0
- /package/dist/common/{ai/llm/core → aiApi}/index.mjs.map +0 -0
- /package/dist/common/{ai/llm/electron → aiApi/server}/index.js.map +0 -0
- /package/dist/common/{ai/llm/electron → aiApi/server}/index.mjs.map +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/common/auth/schema/enums.ts","../../../../src/common/auth/schema/user.ts","../../../../src/common/auth/schema/session.ts","../../../../src/common/auth/schema/account.ts","../../../../src/common/auth/schema/verification.ts","../../../../src/common/auth/schema/relations.ts","../../../../src/business/calendar/db/schema.ts","../../../../src/business/calendar/db/calendarDbService.ts","../../../../src/common/auth/server/session.ts","../../../../src/business/calendar/api/auth-config.ts","../../../../src/business/calendar/api/_shared.ts","../../../../src/business/calendar/api/route-handlers.ts","../../../../src/business/calendar/routes/index.ts"],"names":["pgTable","text","timestamp","sql","boolean","relations","session","user","getSessionUserNumeric","reminders"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Auth Schema - Enums\n * 认证相关的枚举类型定义\n */\n\nimport { pgEnum } from 'drizzle-orm/pg-core';\n\n/**\n * 用户角色枚举\n */\nexport const userRole = pgEnum('UserRole', ['USER', 'ADMIN', 'SUPER_ADMIN']);\n\n/**\n * 类型定义\n */\nexport type UserRole = 'USER' | 'ADMIN' | 'SUPER_ADMIN';\n\n","/**\n * Better Auth — user 表(3.0 SSOT)\n */\nimport { boolean, pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { userRole } from './enums';\n\nexport const user = pgTable('user', {\n id: text('id').primaryKey().notNull(),\n name: text('name').notNull(),\n email: text('email').notNull(),\n emailVerified: boolean('emailVerified').default(false).notNull(),\n image: text('image'),\n phoneNumber: text('phoneNumber'),\n phoneNumberVerified: boolean('phoneNumberVerified').default(false),\n role: userRole('role').default('USER').notNull(),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type User = typeof user.$inferSelect;\nexport type NewUser = typeof user.$inferInsert;\n","/**\n * Better Auth — session 表(3.0 SSOT)\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\nexport const session = pgTable('session', {\n id: text('id').primaryKey().notNull(),\n userId: text('userId')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n token: text('token').notNull(),\n expiresAt: timestamp('expiresAt', { precision: 3, mode: 'date' }).notNull(),\n ipAddress: text('ipAddress'),\n userAgent: text('userAgent'),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type Session = typeof session.$inferSelect;\nexport type NewSession = typeof session.$inferInsert;\n","/**\n * Better Auth — account 表(credential / OAuth,3.0 SSOT)\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\nexport const account = pgTable('account', {\n id: text('id').primaryKey().notNull(),\n accountId: text('accountId').notNull(),\n providerId: text('providerId').notNull(),\n userId: text('userId')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n accessToken: text('accessToken'),\n refreshToken: text('refreshToken'),\n idToken: text('idToken'),\n accessTokenExpiresAt: timestamp('accessTokenExpiresAt', { precision: 3, mode: 'date' }),\n refreshTokenExpiresAt: timestamp('refreshTokenExpiresAt', { precision: 3, mode: 'date' }),\n scope: text('scope'),\n password: text('password'),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type Account = typeof account.$inferSelect;\nexport type NewAccount = typeof account.$inferInsert;\n","/**\n * Better Auth — verification 表(OTP / magic link,3.0 SSOT)\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\nexport const verification = pgTable('verification', {\n id: text('id').primaryKey().notNull(),\n identifier: text('identifier').notNull(),\n value: text('value').notNull(),\n expiresAt: timestamp('expiresAt', { precision: 3, mode: 'date' }).notNull(),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type Verification = typeof verification.$inferSelect;\nexport type NewVerification = typeof verification.$inferInsert;\n\n/** @deprecated 3.0 使用 `verification` */\nexport const verifications = verification;\n","/**\n * Auth Schema - Relations\n * 表关系定义\n */\n\nimport { relations } from 'drizzle-orm';\nimport { user } from './user';\nimport { session } from './session';\nimport { account } from './account';\n\n/**\n * User 表关系\n */\nexport const userRelations = relations(user, ({ many }) => ({\n sessions: many(session),\n accounts: many(account),\n}));\n\n/**\n * Session 表关系\n */\nexport const sessionRelations = relations(session, ({ one }) => ({\n user: one(user, {\n fields: [session.userId],\n references: [user.id],\n }),\n}));\n\n/**\n * Account 表关系\n */\nexport const accountRelations = relations(account, ({ one }) => ({\n user: one(user, {\n fields: [account.userId],\n references: [user.id],\n }),\n}));\n\n","import { pgTable, serial, text, timestamp, boolean, varchar, integer, json } from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\nimport { user as users } from '../../../common/auth/schema';\n\n/**\n * 日历事件表\n */\nexport const calendarEvents = pgTable('calendar_events', {\n id: serial('id').primaryKey(),\n title: varchar('title', { length: 255 }).notNull(),\n description: text('description'),\n startTime: timestamp('start_time').notNull(),\n endTime: timestamp('end_time').notNull(),\n allDay: boolean('all_day').notNull().default(false),\n location: varchar('location', { length: 500 }),\n color: varchar('color', { length: 7 }).notNull().default('#3B82F6'), // 十六进制颜色值\n priority: varchar('priority', { length: 10 }).notNull().default('normal'), // low, normal, high, urgent\n userId: integer('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n});\n\n/**\n * 重复规则表\n */\nexport const recurrenceRules = pgTable('recurrence_rules', {\n id: serial('id').primaryKey(),\n eventId: integer('event_id').notNull().references(() => calendarEvents.id, { onDelete: 'cascade' }),\n ruleType: varchar('rule_type', { length: 20 }).notNull(), // daily, weekly, monthly, yearly, custom\n interval: integer('interval').notNull().default(1), // 间隔\n endDate: timestamp('end_date'), // 结束日期\n count: integer('count'), // 重复次数\n byWeekday: json('by_weekday').$type<number[]>(), // 周几重复 [0,1,2,3,4,5,6],0=周日\n byMonthday: json('by_monthday').$type<number[]>(), // 月中的第几天 [1,2,...,31]\n byMonth: json('by_month').$type<number[]>(), // 第几月 [1,2,...,12]\n createdAt: timestamp('created_at').defaultNow().notNull(),\n});\n\n/**\n * 提醒表\n */\nexport const reminders = pgTable('reminders', {\n id: serial('id').primaryKey(),\n eventId: integer('event_id').notNull().references(() => calendarEvents.id, { onDelete: 'cascade' }),\n reminderTime: timestamp('reminder_time').notNull(), // 提醒时间\n reminderType: varchar('reminder_type', { length: 20 }).notNull(), // notification, email, sms\n status: varchar('status', { length: 20 }).notNull().default('pending'), // pending, sent, failed\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n});\n\n/**\n * 日历配置表 - 用户个人日历设置\n */\nexport const calendarConfigs = pgTable('calendar_configs', {\n id: serial('id').primaryKey(),\n userId: integer('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }).unique(),\n firstDayOfWeek: integer('first_day_of_week').notNull().default(1), // 0=周日, 1=周一\n workingHoursStart: varchar('working_hours_start', { length: 5 }).notNull().default('09:00'),\n workingHoursEnd: varchar('working_hours_end', { length: 5 }).notNull().default('18:00'),\n timeZone: varchar('time_zone', { length: 50 }).notNull().default('Asia/Shanghai'),\n dateFormat: varchar('date_format', { length: 20 }).notNull().default('YYYY-MM-DD'),\n timeFormat: varchar('time_format', { length: 20 }).notNull().default('HH:mm'),\n defaultView: varchar('default_view', { length: 20 }).notNull().default('month'), // month, week, day, agenda\n defaultEventColor: varchar('default_event_color', { length: 7 }).notNull().default('#3B82F6'),\n weekends: boolean('weekends').notNull().default(true),\n eventColors: json('event_colors').$type<Record<string, string>>().default({\n blue: '#3B82F6',\n green: '#10B981',\n purple: '#8B5CF6',\n red: '#EF4444',\n yellow: '#F59E0B',\n pink: '#EC4899',\n indigo: '#6366F1',\n gray: '#6B7280'\n }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n});\n\n/**\n * 事件分享表 - 用于共享日历功能\n */\nexport const eventShares = pgTable('event_shares', {\n id: serial('id').primaryKey(),\n eventId: integer('event_id').notNull().references(() => calendarEvents.id, { onDelete: 'cascade' }),\n sharedWithUserId: integer('shared_with_user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),\n sharedByUserId: integer('shared_by_user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),\n permission: varchar('permission', { length: 20 }).notNull().default('read'), // read, write\n createdAt: timestamp('created_at').defaultNow().notNull(),\n});\n\n// ===== 关系定义 =====\n\n/**\n * 日历事件关系\n */\nexport const calendarEventsRelations = relations(calendarEvents, ({ one, many }) => ({\n user: one(users, {\n fields: [calendarEvents.userId],\n references: [users.id],\n }),\n recurrenceRule: one(recurrenceRules, {\n fields: [calendarEvents.id],\n references: [recurrenceRules.eventId],\n }),\n reminders: many(reminders),\n shares: many(eventShares),\n}));\n\n/**\n * 重复规则关系\n */\nexport const recurrenceRulesRelations = relations(recurrenceRules, ({ one }) => ({\n event: one(calendarEvents, {\n fields: [recurrenceRules.eventId],\n references: [calendarEvents.id],\n }),\n}));\n\n/**\n * 提醒关系\n */\nexport const remindersRelations = relations(reminders, ({ one }) => ({\n event: one(calendarEvents, {\n fields: [reminders.eventId],\n references: [calendarEvents.id],\n }),\n}));\n\n/**\n * 日历配置关系\n */\nexport const calendarConfigsRelations = relations(calendarConfigs, ({ one }) => ({\n user: one(users, {\n fields: [calendarConfigs.userId],\n references: [users.id],\n }),\n}));\n\n/**\n * 事件分享关系\n */\nexport const eventSharesRelations = relations(eventShares, ({ one }) => ({\n event: one(calendarEvents, {\n fields: [eventShares.eventId],\n references: [calendarEvents.id],\n }),\n sharedWithUser: one(users, {\n fields: [eventShares.sharedWithUserId],\n references: [users.id],\n }),\n sharedByUser: one(users, {\n fields: [eventShares.sharedByUserId],\n references: [users.id],\n }),\n}));\n\n// 所有表和关系已在上面使用 export 关键字导出 ","import { and, eq, gte, lte, desc, asc } from 'drizzle-orm';\nimport {\n calendarEvents,\n recurrenceRules,\n reminders,\n calendarConfigs,\n eventShares\n} from './schema';\n\n/**\n * 简化版日历数据库服务\n * \n * 提供基础的数据库操作,避免复杂的类型转换\n * 后续可以根据需要逐步完善\n */\nclass CalendarDbService {\n private _db: any;\n\n /**\n * 设置数据库实例\n */\n setDb(db: any) {\n this._db = db;\n }\n\n /**\n * 数据库是否已初始化\n */\n isConfigured() {\n return Boolean(this._db);\n }\n\n /**\n * 获取数据库实例\n */\n get db() {\n if (!this._db) {\n throw new Error('CalendarDbService: Database instance not set. Call setDb() first.');\n }\n return this._db;\n }\n \n // ===== 事件基础操作 =====\n\n /**\n * 获取用户的所有事件(基础版本)\n */\n async getAllEvents(userId: number, startDate?: Date, endDate?: Date) {\n const conditions = [eq(calendarEvents.userId, userId)];\n \n if (startDate) {\n conditions.push(gte(calendarEvents.startTime, startDate));\n }\n \n if (endDate) {\n conditions.push(lte(calendarEvents.endTime, endDate));\n }\n\n const events = await this.db\n .select()\n .from(calendarEvents)\n .where(and(...conditions))\n .orderBy(asc(calendarEvents.startTime));\n\n return events;\n }\n\n /**\n * 根据ID获取事件\n */\n async getEventById(eventId: number) {\n const [event] = await this.db\n .select()\n .from(calendarEvents)\n .where(eq(calendarEvents.id, eventId))\n .limit(1);\n\n return event || null;\n }\n\n /**\n * 创建事件(基础版本)\n */\n async createEvent(eventData: {\n title: string;\n description?: string;\n startTime: Date;\n endTime: Date;\n allDay: boolean;\n location?: string;\n color: string;\n userId: number;\n }) {\n const [newEvent] = await this.db\n .insert(calendarEvents)\n .values(eventData)\n .returning();\n\n return newEvent;\n }\n\n /**\n * 更新事件\n */\n async updateEvent(eventId: number, eventData: {\n title?: string;\n description?: string;\n startTime?: Date;\n endTime?: Date;\n allDay?: boolean;\n location?: string;\n color?: string;\n }) {\n const updateData = {\n ...eventData,\n updatedAt: new Date()\n };\n\n const [updatedEvent] = await this.db\n .update(calendarEvents)\n .set(updateData)\n .where(eq(calendarEvents.id, eventId))\n .returning();\n\n return updatedEvent;\n }\n\n /**\n * 删除事件\n */\n async deleteEvent(eventId: number): Promise<void> {\n await this.db\n .delete(calendarEvents)\n .where(eq(calendarEvents.id, eventId));\n }\n\n // ===== 用户配置操作 =====\n\n /**\n * 获取用户的日历配置\n */\n async getUserConfig(userId: number) {\n const [config] = await this.db\n .select()\n .from(calendarConfigs)\n .where(eq(calendarConfigs.userId, userId))\n .limit(1);\n\n return config || null;\n }\n\n /**\n * 创建或更新用户配置\n */\n async upsertUserConfig(userId: number, configData: {\n firstDayOfWeek?: number;\n workingHoursStart?: string;\n workingHoursEnd?: string;\n timeZone?: string;\n dateFormat?: string;\n timeFormat?: string;\n defaultView?: string;\n defaultEventColor?: string;\n weekends?: boolean;\n eventColors?: Record<string, string>;\n }) {\n const existingConfig = await this.getUserConfig(userId);\n\n if (existingConfig) {\n // 更新现有配置\n const [updatedConfig] = await this.db\n .update(calendarConfigs)\n .set({\n ...configData,\n updatedAt: new Date()\n })\n .where(eq(calendarConfigs.userId, userId))\n .returning();\n\n return updatedConfig;\n } else {\n // 创建新配置\n const [newConfig] = await this.db\n .insert(calendarConfigs)\n .values({\n userId,\n ...configData\n })\n .returning();\n\n return newConfig;\n }\n }\n\n /**\n * 为事件创建重复规则\n */\n async createRecurrenceRule(ruleData: {\n eventId: number;\n ruleType: string;\n interval: number;\n endDate?: Date;\n count?: number;\n byWeekday?: number[];\n byMonthday?: number[];\n byMonth?: number[];\n }) {\n const [newRule] = await this.db\n .insert(recurrenceRules)\n .values(ruleData)\n .returning();\n\n return newRule;\n }\n\n /**\n * 获取事件的重复规则\n */\n async getRecurrenceRule(eventId: number) {\n const [rule] = await this.db\n .select()\n .from(recurrenceRules)\n .where(eq(recurrenceRules.eventId, eventId))\n .limit(1);\n\n return rule || null;\n }\n\n /**\n * 删除重复规则\n */\n async deleteRecurrenceRule(eventId: number): Promise<void> {\n await this.db\n .delete(recurrenceRules)\n .where(eq(recurrenceRules.eventId, eventId));\n }\n\n /**\n * 为事件创建提醒\n */\n async createReminder(reminderData: {\n eventId: number;\n reminderTime: Date;\n reminderType: string;\n status?: string;\n }) {\n const [newReminder] = await this.db\n .insert(reminders)\n .values({\n ...reminderData,\n status: reminderData.status || 'pending'\n })\n .returning();\n\n return newReminder;\n }\n\n /**\n * 获取事件的提醒列表\n */\n async getEventReminders(eventId: number) {\n const remindersList = await this.db\n .select()\n .from(reminders)\n .where(eq(reminders.eventId, eventId))\n .orderBy(asc(reminders.reminderTime));\n\n return remindersList;\n }\n\n /**\n * 删除事件的所有提醒\n */\n async deleteEventReminders(eventId: number): Promise<void> {\n await this.db\n .delete(reminders)\n .where(eq(reminders.eventId, eventId));\n }\n\n /**\n * 获取用户在指定时间范围内的事件数量\n */\n async getEventCount(userId: number, startDate?: Date, endDate?: Date): Promise<number> {\n const conditions = [eq(calendarEvents.userId, userId)];\n \n if (startDate) {\n conditions.push(gte(calendarEvents.startTime, startDate));\n }\n \n if (endDate) {\n conditions.push(lte(calendarEvents.endTime, endDate));\n }\n\n const result = await this.db\n .select({ count: calendarEvents.id })\n .from(calendarEvents)\n .where(and(...conditions));\n\n return result.length;\n }\n\n /**\n * 搜索事件\n */\n async searchEvents(userId: number, searchTerm: string) {\n const events = await this.db\n .select()\n .from(calendarEvents)\n .where(\n and(\n eq(calendarEvents.userId, userId),\n )\n )\n .orderBy(desc(calendarEvents.startTime));\n\n return events.filter((event: any) => \n event.title.toLowerCase().includes(searchTerm.toLowerCase()) ||\n (event.description && event.description.toLowerCase().includes(searchTerm.toLowerCase()))\n );\n }\n\n /**\n * 批量删除用户的所有事件\n */\n async deleteAllUserEvents(userId: number): Promise<void> {\n await this.db\n .delete(calendarEvents)\n .where(eq(calendarEvents.userId, userId));\n }\n}\n\n\n// 导出单例实例\nexport const calendarDbService = new CalendarDbService();\nexport default calendarDbService; ","/**\n * 从 Request 解析 Better Auth session(替代自研 JWT validateApiAuth)\n */\nimport type { Sa2kitAuthInstance } from './types';\n\nexport type SessionUser = {\n id: string;\n email: string;\n name: string;\n role?: string;\n phoneNumber?: string | null;\n};\n\nexport async function getSessionUser(\n auth: Sa2kitAuthInstance,\n request: Request,\n): Promise<SessionUser | null> {\n const session = await auth.api.getSession({ headers: request.headers });\n if (!session?.user) return null;\n\n const user = session.user as SessionUser & { role?: string };\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n role: user.role,\n phoneNumber: (user as { phoneNumber?: string | null }).phoneNumber ?? null,\n };\n}\n\nexport type SessionUserNumeric = Omit<SessionUser, 'id'> & { id: number };\n\n/** 兼容 numeric id 消费方(legacy calendar 等) */\nexport async function getSessionUserNumeric(\n auth: Sa2kitAuthInstance,\n request: Request,\n): Promise<SessionUserNumeric | null> {\n const user = await getSessionUser(auth, request);\n if (!user) return null;\n const numericId = Number.parseInt(user.id, 10);\n if (Number.isNaN(numericId)) return null;\n const { id: _id, ...rest } = user;\n return { ...rest, id: numericId };\n}\n\nexport function createSessionValidator(auth: Sa2kitAuthInstance) {\n return {\n getSessionUser: (request: Request) => getSessionUser(auth, request),\n getSessionUserNumeric: (request: Request) => getSessionUserNumeric(auth, request),\n };\n}\n","import type { NextRequest } from 'next/server';\nimport { calendarDbService } from '../db/calendarDbService';\nimport type { Sa2kitAuthInstance } from '../../../common/auth/server/types';\nimport { createSessionValidator } from '../../../common/auth/server/session';\n\nexport type CalendarAuthValidator = (\n request: NextRequest,\n) => Promise<{ id: number } | null>;\n\nlet configuredValidator: CalendarAuthValidator | null = null;\n\n/**\n * 注入 calendar API 路由使用的 session 校验(应用启动时调用一次)\n */\nexport function configureCalendarApiAuth(validateAuth: CalendarAuthValidator): void {\n configuredValidator = validateAuth;\n}\n\n/** 重置(测试用) */\nexport function resetCalendarApiAuth(): void {\n configuredValidator = null;\n}\n\nexport function resolveCalendarAuthValidator(\n validateAuth?: CalendarAuthValidator,\n): CalendarAuthValidator {\n const validator = validateAuth ?? configuredValidator;\n if (!validator) {\n throw new Error(\n 'Calendar API 未配置 auth:请在应用启动时调用 configureCalendarApiAuth(validateAuth),' +\n '或 configureCalendarApiWithBetterAuth(auth),或在 createDefaultCalendarRouteConfig(validateAuth) 中显式传入。',\n );\n }\n return validator;\n}\n\n/**\n * 使用 Better Auth session 一键配置 calendar API\n */\nexport function configureCalendarApiWithBetterAuth(\n auth: Sa2kitAuthInstance,\n options?: { db?: unknown },\n): void {\n const { getSessionUserNumeric } = createSessionValidator(auth);\n configureCalendarApiAuth((request) => getSessionUserNumeric(request));\n if (options?.db) {\n calendarDbService.setDb(options.db);\n }\n}\n","import type { NextRequest } from 'next/server';\nimport { calendarDbService } from '../db/calendarDbService';\nimport type { CalendarRouteConfig } from '../routes';\nimport {\n resolveCalendarAuthValidator,\n type CalendarAuthValidator,\n} from './auth-config';\n\nexport {\n configureCalendarApiAuth,\n configureCalendarApiWithBetterAuth,\n resetCalendarApiAuth,\n type CalendarAuthValidator,\n} from './auth-config';\n\n/**\n * 创建 calendar 路由所需的 validateAuth(由 Better Auth session 注入)\n *\n * @example\n * ```ts\n * configureCalendarApiWithBetterAuth(auth, { db });\n * const routeConfig = createDefaultCalendarRouteConfig();\n * export const GET = createGetEventsHandler(routeConfig);\n * ```\n */\nexport function createCalendarAuthRequirement(\n validateAuth: CalendarAuthValidator,\n): CalendarAuthValidator {\n return validateAuth;\n}\n\nexport function ensureCalendarDbReady() {\n if (calendarDbService.isConfigured()) return null;\n\n return Response.json(\n {\n success: false,\n error:\n 'Calendar DB is not initialized. Please call calendarDbService.setDb(db) or use create*Handler from sa2kit/calendar/routes with db injection.',\n },\n { status: 500 },\n );\n}\n\nexport function createDefaultCalendarRouteConfig(\n validateAuth?: CalendarAuthValidator,\n): CalendarRouteConfig {\n return {\n validateAuth: resolveCalendarAuthValidator(validateAuth),\n };\n}\n\nexport function withCalendarDbGuard<T extends unknown[]>(\n handler: (...args: T) => Promise<Response>,\n) {\n return async (...args: T): Promise<Response> => {\n const dbError = ensureCalendarDbReady();\n if (dbError) return dbError;\n return handler(...args);\n };\n}\n","import type { NextRequest } from 'next/server';\nimport {\n createBatchDeleteEventsHandler,\n createConfigHandler,\n createCreateEventHandler,\n createDeleteEventHandler,\n createGetEventByIdHandler,\n createGetEventsHandler,\n createUpdateEventHandler,\n type CalendarRouteConfig,\n} from '../routes';\nimport { createDefaultCalendarRouteConfig, withCalendarDbGuard } from './_shared';\n\nfunction resolveConfig(config?: CalendarRouteConfig): CalendarRouteConfig {\n return config ?? createDefaultCalendarRouteConfig();\n}\n\n/** 懒加载:首次请求时再解析 auth / 创建 handler */\nfunction lazyHandler<T extends (...args: never[]) => Promise<Response>>(\n factory: (config: CalendarRouteConfig) => T,\n config?: CalendarRouteConfig,\n) {\n let handler: T | null = null;\n return (...args: Parameters<T>) => {\n if (!handler) {\n handler = factory(resolveConfig(config));\n }\n return handler(...args);\n };\n}\n\nexport function createCalendarEventsRouteHandlers(config?: CalendarRouteConfig) {\n return {\n GET: withCalendarDbGuard(lazyHandler(createGetEventsHandler, config)),\n POST: withCalendarDbGuard(lazyHandler(createCreateEventHandler, config)),\n };\n}\n\nexport function createCalendarEventByIdRouteHandlers(config?: CalendarRouteConfig) {\n return {\n GET: withCalendarDbGuard(\n lazyHandler(createGetEventByIdHandler, config) as (\n request: NextRequest,\n routeParams: { params: { id: string } },\n ) => Promise<Response>,\n ),\n PUT: withCalendarDbGuard(\n lazyHandler(createUpdateEventHandler, config) as (\n request: NextRequest,\n routeParams: { params: { id: string } },\n ) => Promise<Response>,\n ),\n DELETE: withCalendarDbGuard(\n lazyHandler(createDeleteEventHandler, config) as (\n request: NextRequest,\n routeParams: { params: { id: string } },\n ) => Promise<Response>,\n ),\n };\n}\n\nexport function createCalendarBatchDeleteRouteHandlers(config?: CalendarRouteConfig) {\n return {\n DELETE: withCalendarDbGuard(lazyHandler(createBatchDeleteEventsHandler, config)),\n };\n}\n\nexport function createCalendarConfigRouteHandlers(config?: CalendarRouteConfig) {\n let configHandlers: ReturnType<typeof createConfigHandler> | null = null;\n const ensureConfigHandlers = () => {\n if (!configHandlers) {\n configHandlers = createConfigHandler(resolveConfig(config));\n }\n return configHandlers;\n };\n\n return {\n GET: withCalendarDbGuard((request: NextRequest) => ensureConfigHandlers().GET(request)),\n PUT: withCalendarDbGuard((request: NextRequest) => ensureConfigHandlers().PUT(request)),\n };\n}\n","import { NextRequest, NextResponse } from 'next/server';\nimport { calendarDbService } from '../db/calendarDbService';\n\nexport interface CalendarRouteConfig {\n /**\n * Drizzle 数据库实例\n * 如果提供,将自动初始化 calendarDbService\n */\n db?: any;\n /**\n * 验证用户身份的函数\n * 应该返回用户信息或 null\n */\n validateAuth: (request: NextRequest) => Promise<{ id: number } | null>;\n}\n\n/**\n * 初始化数据库服务的辅助函数\n */\nfunction initDbService(db?: any) {\n if (db) {\n calendarDbService.setDb(db);\n }\n}\n\n/**\n * 创建获取日历事件列表的处理器\n */\nexport function createGetEventsHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const { searchParams } = new URL(request.url);\n const startDateStr = searchParams.get('startDate');\n const endDateStr = searchParams.get('endDate');\n\n let startDate: Date | undefined;\n let endDate: Date | undefined;\n\n if (startDateStr) {\n startDate = new Date(startDateStr);\n if (isNaN(startDate.getTime())) {\n return NextResponse.json({ success: false, error: '开始日期格式无效' }, { status: 400 });\n }\n }\n\n if (endDateStr) {\n endDate = new Date(endDateStr);\n if (isNaN(endDate.getTime())) {\n return NextResponse.json({ success: false, error: '结束日期格式无效' }, { status: 400 });\n }\n }\n\n const events = await calendarDbService.getAllEvents(user.id, startDate, endDate);\n\n return NextResponse.json({\n success: true,\n data: events,\n message: '获取事件列表成功'\n });\n } catch (error) {\n console.error('获取事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建日历事件的处理器\n */\nexport function createCreateEventHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const body = await request.json();\n \n if (!body.title || typeof body.title !== 'string' || body.title.trim() === '') {\n return NextResponse.json({ success: false, error: '事件标题不能为空' }, { status: 400 });\n }\n\n if (!body.startTime || !body.endTime) {\n return NextResponse.json({ success: false, error: '开始时间和结束时间不能为空' }, { status: 400 });\n }\n\n const startTime = new Date(body.startTime);\n const endTime = new Date(body.endTime);\n\n if (isNaN(startTime.getTime()) || isNaN(endTime.getTime())) {\n return NextResponse.json({ success: false, error: '日期格式无效' }, { status: 400 });\n }\n\n if (startTime.getTime() >= endTime.getTime()) {\n return NextResponse.json({ success: false, error: '结束时间必须晚于开始时间' }, { status: 400 });\n }\n\n const eventData = {\n title: body.title.trim(),\n description: body.description || null,\n startTime,\n endTime,\n allDay: Boolean(body.allDay),\n location: body.location || null,\n color: body.color || '#3B82F6',\n userId: user.id,\n };\n\n const newEvent = await calendarDbService.createEvent(eventData);\n\n if (body.recurrence) {\n await calendarDbService.createRecurrenceRule({\n eventId: newEvent.id,\n ...body.recurrence,\n endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : undefined,\n });\n }\n\n if (body.reminders && Array.isArray(body.reminders)) {\n for (const reminder of body.reminders) {\n if (reminder.reminderTime) {\n await calendarDbService.createReminder({\n eventId: newEvent.id,\n reminderTime: new Date(reminder.reminderTime),\n reminderType: reminder.reminderType || 'notification',\n status: 'pending'\n });\n }\n }\n }\n\n return NextResponse.json({\n success: true,\n data: newEvent,\n message: '创建事件成功'\n });\n } catch (error) {\n console.error('创建事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建获取单个事件的处理器\n */\nexport function createGetEventByIdHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest, { params }: { params: { id: string } }) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const eventId = parseInt(params.id);\n if (isNaN(eventId)) {\n return NextResponse.json({ success: false, error: '事件ID无效' }, { status: 400 });\n }\n\n const event = await calendarDbService.getEventById(eventId);\n if (!event) {\n return NextResponse.json({ success: false, error: '事件不存在' }, { status: 404 });\n }\n\n if (event.userId !== user.id) {\n return NextResponse.json({ success: false, error: '无权访问此事件' }, { status: 403 });\n }\n\n const [recurrenceRule, reminders] = await Promise.all([\n calendarDbService.getRecurrenceRule(eventId),\n calendarDbService.getEventReminders(eventId)\n ]);\n\n return NextResponse.json({\n success: true,\n data: {\n ...event,\n recurrenceRule: recurrenceRule || undefined,\n reminders: reminders || []\n },\n message: '获取事件成功'\n });\n } catch (error) {\n console.error('获取事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建更新事件的处理器\n */\nexport function createUpdateEventHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest, { params }: { params: { id: string } }) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const eventId = parseInt(params.id);\n if (isNaN(eventId)) {\n return NextResponse.json({ success: false, error: '事件ID无效' }, { status: 400 });\n }\n\n const existingEvent = await calendarDbService.getEventById(eventId);\n if (!existingEvent || existingEvent.userId !== user.id) {\n return NextResponse.json({ success: false, error: '事件不存在或无权修改' }, { status: 404 });\n }\n\n const body = await request.json();\n const updateData: any = {};\n\n if (body.title !== undefined) updateData.title = body.title.trim();\n if (body.description !== undefined) updateData.description = body.description;\n if (body.startTime !== undefined) updateData.startTime = new Date(body.startTime);\n if (body.endTime !== undefined) updateData.endTime = new Date(body.endTime);\n if (body.allDay !== undefined) updateData.allDay = Boolean(body.allDay);\n if (body.location !== undefined) updateData.location = body.location;\n if (body.color !== undefined) updateData.color = body.color;\n\n const updatedEvent = await calendarDbService.updateEvent(eventId, updateData);\n\n if (body.recurrence !== undefined) {\n await calendarDbService.deleteRecurrenceRule(eventId);\n if (body.recurrence) {\n await calendarDbService.createRecurrenceRule({\n eventId,\n ...body.recurrence,\n endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : undefined,\n });\n }\n }\n\n if (body.reminders !== undefined) {\n await calendarDbService.deleteEventReminders(eventId);\n if (Array.isArray(body.reminders)) {\n for (const reminder of body.reminders) {\n if (reminder.reminderTime) {\n await calendarDbService.createReminder({\n eventId,\n reminderTime: new Date(reminder.reminderTime),\n reminderType: reminder.reminderType || 'notification',\n status: 'pending'\n });\n }\n }\n }\n }\n\n return NextResponse.json({\n success: true,\n data: updatedEvent,\n message: '更新事件成功'\n });\n } catch (error) {\n console.error('更新事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建删除事件的处理器\n */\nexport function createDeleteEventHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest, { params }: { params: { id: string } }) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const eventId = parseInt(params.id);\n if (isNaN(eventId)) {\n return NextResponse.json({ success: false, error: '事件ID无效' }, { status: 400 });\n }\n\n const existingEvent = await calendarDbService.getEventById(eventId);\n if (!existingEvent || existingEvent.userId !== user.id) {\n return NextResponse.json({ success: false, error: '事件不存在或无权删除' }, { status: 404 });\n }\n\n await calendarDbService.deleteEvent(eventId);\n\n return NextResponse.json({\n success: true,\n message: '删除事件成功'\n });\n } catch (error) {\n console.error('删除事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建批量删除事件的处理器\n */\nexport function createBatchDeleteEventsHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const body = await request.json();\n if (!body.eventIds || !Array.isArray(body.eventIds)) {\n return NextResponse.json({ success: false, error: '事件ID列表不能为空' }, { status: 400 });\n }\n\n const results = await Promise.all(\n body.eventIds.map(async (id: number) => {\n const event = await calendarDbService.getEventById(id);\n if (event && event.userId === user.id) {\n await calendarDbService.deleteEvent(id);\n return true;\n }\n return false;\n })\n );\n\n const deletedCount = results.filter(Boolean).length;\n\n return NextResponse.json({\n success: true,\n data: { deletedCount },\n message: '成功删除 ' + (deletedCount) + ' 个事件'\n });\n } catch (error) {\n console.error('批量删除事件失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n };\n}\n\n/**\n * 创建配置处理器的工厂\n */\nexport function createConfigHandler(config: CalendarRouteConfig) {\n initDbService(config.db);\n return {\n GET: async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const dbConfig = await calendarDbService.getUserConfig(user.id);\n return NextResponse.json({\n success: true,\n data: dbConfig || {\n firstDayOfWeek: 1,\n workingHoursStart: '09:00',\n workingHoursEnd: '18:00',\n timeZone: 'Asia/Shanghai',\n dateFormat: 'YYYY-MM-DD',\n timeFormat: 'HH:mm',\n defaultView: 'month',\n defaultEventColor: '#3B82F6',\n weekends: true,\n eventColors: {}\n },\n message: '获取配置成功'\n });\n } catch (error) {\n console.error('获取配置失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n },\n PUT: async (request: NextRequest) => {\n try {\n const user = await config.validateAuth(request);\n if (!user) {\n return NextResponse.json({ success: false, error: '未授权访问' }, { status: 401 });\n }\n\n const body = await request.json();\n const updatedConfig = await calendarDbService.upsertUserConfig(user.id, body);\n\n return NextResponse.json({\n success: true,\n data: updatedConfig,\n message: '更新配置成功'\n });\n } catch (error) {\n console.error('更新配置失败:', error);\n return NextResponse.json({ success: false, error: '服务器内部错误' }, { status: 500 });\n }\n }\n };\n}\n\nexport {\n configureCalendarApiAuth,\n configureCalendarApiWithBetterAuth,\n resetCalendarApiAuth,\n createCalendarAuthRequirement,\n createDefaultCalendarRouteConfig,\n withCalendarDbGuard,\n type CalendarAuthValidator,\n} from '../api/_shared';\n\nexport {\n createCalendarEventsRouteHandlers,\n createCalendarEventByIdRouteHandlers,\n createCalendarBatchDeleteRouteHandlers,\n createCalendarConfigRouteHandlers,\n} from '../api/route-handlers';\n\n"]}
|
package/dist/chunk-3R6JHA6D.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var react = require('react');
|
|
4
|
-
|
|
5
|
-
// src/common/ai/llm/prompt/variables.ts
|
|
6
|
-
var normalizePromptVariables = (variables = {}) => {
|
|
7
|
-
const normalized = {};
|
|
8
|
-
Object.entries(variables).forEach(([key, value]) => {
|
|
9
|
-
if (value === null || value === void 0) {
|
|
10
|
-
normalized[key] = "";
|
|
11
|
-
} else {
|
|
12
|
-
normalized[key] = String(value);
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
return normalized;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// src/common/ai/llm/prompt/template.ts
|
|
19
|
-
var applyPromptTemplate = (template, variables = {}, options = {}) => {
|
|
20
|
-
if (!template) {
|
|
21
|
-
return "";
|
|
22
|
-
}
|
|
23
|
-
const resolved = normalizePromptVariables(variables);
|
|
24
|
-
const missingValue = options.missingValue ?? "";
|
|
25
|
-
return template.replace(/\{\{\s*([a-zA-Z0-9_.-]+)\s*\}\}/g, (_match, key) => {
|
|
26
|
-
if (Object.prototype.hasOwnProperty.call(resolved, key)) {
|
|
27
|
-
return resolved[key] ?? "";
|
|
28
|
-
}
|
|
29
|
-
return options.preserveUnknown ? `{{${key}}}` : missingValue;
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
var buildBaseMessages = (systemPrompt, initialMessages) => {
|
|
33
|
-
const baseMessages = [];
|
|
34
|
-
if (systemPrompt) {
|
|
35
|
-
baseMessages.push({ role: "system", content: systemPrompt });
|
|
36
|
-
}
|
|
37
|
-
if (initialMessages?.length) {
|
|
38
|
-
baseMessages.push(...initialMessages);
|
|
39
|
-
}
|
|
40
|
-
return baseMessages;
|
|
41
|
-
};
|
|
42
|
-
var useAiChat = (options) => {
|
|
43
|
-
const systemPromptRef = react.useRef(options.systemPrompt);
|
|
44
|
-
const templateRef = react.useRef(options.template);
|
|
45
|
-
const [messages, setMessages] = react.useState(
|
|
46
|
-
() => buildBaseMessages(systemPromptRef.current, options.initialMessages)
|
|
47
|
-
);
|
|
48
|
-
const messagesRef = react.useRef(messages);
|
|
49
|
-
const [status, setStatus] = react.useState("idle");
|
|
50
|
-
const [error, setError] = react.useState(null);
|
|
51
|
-
const [lastResponse, setLastResponse] = react.useState(null);
|
|
52
|
-
const syncMessages = (nextMessages) => {
|
|
53
|
-
messagesRef.current = nextMessages;
|
|
54
|
-
setMessages(nextMessages);
|
|
55
|
-
};
|
|
56
|
-
const reset = react.useCallback(() => {
|
|
57
|
-
syncMessages(buildBaseMessages(systemPromptRef.current, options.initialMessages));
|
|
58
|
-
setStatus("idle");
|
|
59
|
-
setError(null);
|
|
60
|
-
setLastResponse(null);
|
|
61
|
-
}, [options.initialMessages]);
|
|
62
|
-
const setSystemPrompt = react.useCallback(
|
|
63
|
-
(prompt) => {
|
|
64
|
-
systemPromptRef.current = prompt;
|
|
65
|
-
reset();
|
|
66
|
-
},
|
|
67
|
-
[reset]
|
|
68
|
-
);
|
|
69
|
-
const sendMessage = react.useCallback(
|
|
70
|
-
async (input, requestOptions = {}) => {
|
|
71
|
-
const { template, variables, ...chatOptions } = requestOptions;
|
|
72
|
-
const activeTemplate = template ?? templateRef.current;
|
|
73
|
-
const mergedVariables = { input, ...variables ?? {} };
|
|
74
|
-
const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;
|
|
75
|
-
const userMessage = { role: "user", content };
|
|
76
|
-
const nextMessages = [...messagesRef.current, userMessage];
|
|
77
|
-
syncMessages(nextMessages);
|
|
78
|
-
setStatus("loading");
|
|
79
|
-
setError(null);
|
|
80
|
-
try {
|
|
81
|
-
const response = await options.client.sendChat({
|
|
82
|
-
messages: nextMessages,
|
|
83
|
-
...chatOptions
|
|
84
|
-
});
|
|
85
|
-
const assistantMessage = response.message ?? {
|
|
86
|
-
role: "assistant",
|
|
87
|
-
content: response.content,
|
|
88
|
-
toolCalls: response.toolCalls
|
|
89
|
-
};
|
|
90
|
-
const updatedMessages = [...nextMessages, assistantMessage];
|
|
91
|
-
syncMessages(updatedMessages);
|
|
92
|
-
setStatus("success");
|
|
93
|
-
setLastResponse(response);
|
|
94
|
-
return response;
|
|
95
|
-
} catch (err) {
|
|
96
|
-
const nextError = err instanceof Error ? err : new Error(String(err));
|
|
97
|
-
setStatus("error");
|
|
98
|
-
setError(nextError);
|
|
99
|
-
throw nextError;
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
[options.client]
|
|
103
|
-
);
|
|
104
|
-
return {
|
|
105
|
-
status,
|
|
106
|
-
isLoading: status === "loading",
|
|
107
|
-
error,
|
|
108
|
-
messages,
|
|
109
|
-
lastResponse,
|
|
110
|
-
sendMessage,
|
|
111
|
-
reset,
|
|
112
|
-
setSystemPrompt
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
exports.applyPromptTemplate = applyPromptTemplate;
|
|
117
|
-
exports.normalizePromptVariables = normalizePromptVariables;
|
|
118
|
-
exports.useAiChat = useAiChat;
|
|
119
|
-
//# sourceMappingURL=chunk-3R6JHA6D.js.map
|
|
120
|
-
//# sourceMappingURL=chunk-3R6JHA6D.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/ai/llm/prompt/variables.ts","../src/common/ai/llm/prompt/template.ts","../src/common/ai/llm/hooks/useAiChat.ts"],"names":["useRef","useState","useCallback"],"mappings":"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","file":"chunk-3R6JHA6D.js","sourcesContent":["export type PromptVariableValue = string | number | boolean | null | undefined;\n\nexport type PromptVariables = Record<string, PromptVariableValue>;\n\nexport const normalizePromptVariables = (\n variables: PromptVariables = {}\n): Record<string, string> => {\n const normalized: Record<string, string> = {};\n\n Object.entries(variables).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n normalized[key] = '';\n } else {\n normalized[key] = String(value);\n }\n });\n\n return normalized;\n};\n","import { normalizePromptVariables, PromptVariables } from './variables';\n\nexport interface PromptTemplateOptions {\n missingValue?: string;\n preserveUnknown?: boolean;\n}\n\nexport const applyPromptTemplate = (\n template: string,\n variables: PromptVariables = {},\n options: PromptTemplateOptions = {}\n): string => {\n if (!template) {\n return '';\n }\n\n const resolved = normalizePromptVariables(variables);\n const missingValue = options.missingValue ?? '';\n\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (_match, key: string) => {\n if (Object.prototype.hasOwnProperty.call(resolved, key)) {\n return resolved[key] ?? '';\n }\n\n return options.preserveUnknown ? `{{${key}}}` : missingValue;\n });\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { applyPromptTemplate } from '../prompt/template';\nimport type {\n AiChatInputOptions,\n AiChatResponse,\n AiChatStatus,\n AiClient,\n AiMessage,\n} from '../types';\n\nexport interface UseAiChatOptions {\n client: AiClient;\n systemPrompt?: string;\n template?: string;\n initialMessages?: AiMessage[];\n}\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const useAiChat = (options: UseAiChatOptions) => {\n const systemPromptRef = useRef(options.systemPrompt);\n const templateRef = useRef(options.template);\n const [messages, setMessages] = useState<AiMessage[]>(() =>\n buildBaseMessages(systemPromptRef.current, options.initialMessages)\n );\n const messagesRef = useRef(messages);\n const [status, setStatus] = useState<AiChatStatus>('idle');\n const [error, setError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<AiChatResponse | null>(null);\n\n const syncMessages = (nextMessages: AiMessage[]) => {\n messagesRef.current = nextMessages;\n setMessages(nextMessages);\n };\n\n const reset = useCallback(() => {\n syncMessages(buildBaseMessages(systemPromptRef.current, options.initialMessages));\n setStatus('idle');\n setError(null);\n setLastResponse(null);\n }, [options.initialMessages]);\n\n const setSystemPrompt = useCallback(\n (prompt?: string) => {\n systemPromptRef.current = prompt;\n reset();\n },\n [reset]\n );\n\n const sendMessage = useCallback(\n async (input: string, requestOptions: AiChatInputOptions = {}) => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? templateRef.current;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messagesRef.current, userMessage];\n syncMessages(nextMessages);\n setStatus('loading');\n setError(null);\n\n try {\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n const updatedMessages = [...nextMessages, assistantMessage];\n syncMessages(updatedMessages);\n setStatus('success');\n setLastResponse(response);\n return response;\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n setStatus('error');\n setError(nextError);\n throw nextError;\n }\n },\n [options.client]\n );\n\n return {\n status,\n isLoading: status === 'loading',\n error,\n messages,\n lastResponse,\n sendMessage,\n reset,\n setSystemPrompt,\n };\n};\n"]}
|
package/dist/chunk-4PJM4752.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-4PJM4752.js"}
|
package/dist/chunk-7PMT4L4I.js
DELETED
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkY7WHUKJF_js = require('./chunk-Y7WHUKJF.js');
|
|
4
|
-
var React4 = require('react');
|
|
5
|
-
var classVarianceAuthority = require('class-variance-authority');
|
|
6
|
-
var lucideReact = require('lucide-react');
|
|
7
|
-
var reactDom = require('react-dom');
|
|
8
|
-
|
|
9
|
-
function _interopNamespace(e) {
|
|
10
|
-
if (e && e.__esModule) return e;
|
|
11
|
-
var n = Object.create(null);
|
|
12
|
-
if (e) {
|
|
13
|
-
Object.keys(e).forEach(function (k) {
|
|
14
|
-
if (k !== 'default') {
|
|
15
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
get: function () { return e[k]; }
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
n.default = e;
|
|
24
|
-
return Object.freeze(n);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
|
|
28
|
-
|
|
29
|
-
var buttonVariants = classVarianceAuthority.cva(
|
|
30
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
31
|
-
{
|
|
32
|
-
variants: {
|
|
33
|
-
variant: {
|
|
34
|
-
default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
|
|
35
|
-
destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
|
|
36
|
-
outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
|
|
37
|
-
secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
|
|
38
|
-
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
39
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
40
|
-
},
|
|
41
|
-
size: {
|
|
42
|
-
default: "h-9 px-4 py-2",
|
|
43
|
-
sm: "h-8 rounded-md px-3 text-xs",
|
|
44
|
-
lg: "h-10 rounded-md px-8",
|
|
45
|
-
icon: "h-9 w-9"
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
defaultVariants: {
|
|
49
|
-
variant: "default",
|
|
50
|
-
size: "default"
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
);
|
|
54
|
-
var Button = React4__namespace.forwardRef(
|
|
55
|
-
({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
|
|
56
|
-
if (asChild && React4__namespace.isValidElement(children)) {
|
|
57
|
-
const childProps = children.props;
|
|
58
|
-
return React4__namespace.cloneElement(children, {
|
|
59
|
-
...props,
|
|
60
|
-
className: chunkY7WHUKJF_js.cn(buttonVariants({ variant, size, className }), childProps.className)
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return /* @__PURE__ */ React4__namespace.createElement(
|
|
64
|
-
"button",
|
|
65
|
-
{
|
|
66
|
-
className: chunkY7WHUKJF_js.cn(buttonVariants({ variant, size, className })),
|
|
67
|
-
ref,
|
|
68
|
-
...props
|
|
69
|
-
},
|
|
70
|
-
children
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
);
|
|
74
|
-
Button.displayName = "Button";
|
|
75
|
-
var Input = React4__namespace.forwardRef(
|
|
76
|
-
({ className, type, ...props }, ref) => {
|
|
77
|
-
return /* @__PURE__ */ React4__namespace.createElement(
|
|
78
|
-
"input",
|
|
79
|
-
{
|
|
80
|
-
type,
|
|
81
|
-
className: chunkY7WHUKJF_js.cn(
|
|
82
|
-
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
83
|
-
className
|
|
84
|
-
),
|
|
85
|
-
ref,
|
|
86
|
-
...props
|
|
87
|
-
}
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
);
|
|
91
|
-
Input.displayName = "Input";
|
|
92
|
-
function useControllableState({
|
|
93
|
-
value,
|
|
94
|
-
defaultValue,
|
|
95
|
-
onChange
|
|
96
|
-
}) {
|
|
97
|
-
const [internal, setInternal] = React4__namespace.useState(defaultValue);
|
|
98
|
-
const isControlled = value !== void 0;
|
|
99
|
-
const state = isControlled ? value : internal;
|
|
100
|
-
const setState = React4__namespace.useCallback(
|
|
101
|
-
(next) => {
|
|
102
|
-
if (!isControlled) setInternal(next);
|
|
103
|
-
onChange?.(next);
|
|
104
|
-
},
|
|
105
|
-
[isControlled, onChange]
|
|
106
|
-
);
|
|
107
|
-
return [state, setState];
|
|
108
|
-
}
|
|
109
|
-
function Portal({
|
|
110
|
-
children,
|
|
111
|
-
container
|
|
112
|
-
}) {
|
|
113
|
-
const [mounted, setMounted] = React4__namespace.useState(false);
|
|
114
|
-
React4__namespace.useEffect(() => {
|
|
115
|
-
setMounted(true);
|
|
116
|
-
}, []);
|
|
117
|
-
if (!mounted) return null;
|
|
118
|
-
return reactDom.createPortal(children, container ?? document.body);
|
|
119
|
-
}
|
|
120
|
-
function useOnClickOutside(refs, handler, enabled) {
|
|
121
|
-
React4__namespace.useEffect(() => {
|
|
122
|
-
if (!enabled) return;
|
|
123
|
-
const listener = (event) => {
|
|
124
|
-
const target = event.target;
|
|
125
|
-
const clickedInside = refs.some((ref) => {
|
|
126
|
-
const el = ref.current;
|
|
127
|
-
return el && el.contains(target);
|
|
128
|
-
});
|
|
129
|
-
if (!clickedInside) {
|
|
130
|
-
handler(event);
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
document.addEventListener("mousedown", listener);
|
|
134
|
-
document.addEventListener("touchstart", listener);
|
|
135
|
-
return () => {
|
|
136
|
-
document.removeEventListener("mousedown", listener);
|
|
137
|
-
document.removeEventListener("touchstart", listener);
|
|
138
|
-
};
|
|
139
|
-
}, [refs, handler, enabled]);
|
|
140
|
-
}
|
|
141
|
-
function mergeRefs(...refs) {
|
|
142
|
-
return (value) => {
|
|
143
|
-
refs.forEach((ref) => {
|
|
144
|
-
if (!ref) return;
|
|
145
|
-
if (typeof ref === "function") {
|
|
146
|
-
ref(value);
|
|
147
|
-
} else {
|
|
148
|
-
ref.current = value;
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// src/common/components/Dialog.tsx
|
|
155
|
-
var DialogContext = React4__namespace.createContext(null);
|
|
156
|
-
var Dialog = ({ open, defaultOpen = false, onOpenChange, children }) => {
|
|
157
|
-
const [isOpen, setIsOpen] = useControllableState({
|
|
158
|
-
value: open,
|
|
159
|
-
defaultValue: defaultOpen,
|
|
160
|
-
onChange: onOpenChange
|
|
161
|
-
});
|
|
162
|
-
const triggerRef = React4__namespace.useRef(null);
|
|
163
|
-
const contentRef = React4__namespace.useRef(null);
|
|
164
|
-
return /* @__PURE__ */ React4__namespace.createElement(DialogContext.Provider, { value: { open: isOpen, setOpen: setIsOpen, triggerRef, contentRef } }, children);
|
|
165
|
-
};
|
|
166
|
-
var DialogTrigger = React4__namespace.forwardRef(
|
|
167
|
-
({ children, onClick, ...props }, ref) => {
|
|
168
|
-
const ctx = React4__namespace.useContext(DialogContext);
|
|
169
|
-
if (!ctx) return null;
|
|
170
|
-
const mergedRef = mergeRefs(ctx.triggerRef, ref);
|
|
171
|
-
const handleClick = (e) => {
|
|
172
|
-
ctx.setOpen(true);
|
|
173
|
-
onClick?.(e);
|
|
174
|
-
};
|
|
175
|
-
return /* @__PURE__ */ React4__namespace.createElement("button", { ref: mergedRef, type: "button", onClick: handleClick, ...props }, children);
|
|
176
|
-
}
|
|
177
|
-
);
|
|
178
|
-
DialogTrigger.displayName = "DialogTrigger";
|
|
179
|
-
var DialogPortal = ({ children }) => {
|
|
180
|
-
const ctx = React4__namespace.useContext(DialogContext);
|
|
181
|
-
if (!ctx?.open) return null;
|
|
182
|
-
return /* @__PURE__ */ React4__namespace.createElement(Portal, null, children);
|
|
183
|
-
};
|
|
184
|
-
var DialogClose = React4__namespace.forwardRef(({ onClick, ...props }, ref) => {
|
|
185
|
-
const ctx = React4__namespace.useContext(DialogContext);
|
|
186
|
-
return /* @__PURE__ */ React4__namespace.createElement(
|
|
187
|
-
"button",
|
|
188
|
-
{
|
|
189
|
-
ref,
|
|
190
|
-
type: "button",
|
|
191
|
-
onClick: (e) => {
|
|
192
|
-
ctx?.setOpen(false);
|
|
193
|
-
onClick?.(e);
|
|
194
|
-
},
|
|
195
|
-
...props
|
|
196
|
-
}
|
|
197
|
-
);
|
|
198
|
-
});
|
|
199
|
-
DialogClose.displayName = "DialogClose";
|
|
200
|
-
var DialogOverlay = React4__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
201
|
-
const ctx = React4__namespace.useContext(DialogContext);
|
|
202
|
-
if (!ctx?.open) return null;
|
|
203
|
-
return /* @__PURE__ */ React4__namespace.createElement(
|
|
204
|
-
"div",
|
|
205
|
-
{
|
|
206
|
-
ref,
|
|
207
|
-
className: chunkY7WHUKJF_js.cn("fixed inset-0 z-[9999] bg-black/80", className),
|
|
208
|
-
...props
|
|
209
|
-
}
|
|
210
|
-
);
|
|
211
|
-
});
|
|
212
|
-
DialogOverlay.displayName = "DialogOverlay";
|
|
213
|
-
var DialogContent = React4__namespace.forwardRef(
|
|
214
|
-
({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {
|
|
215
|
-
const ctx = React4__namespace.useContext(DialogContext);
|
|
216
|
-
const open = !!ctx?.open;
|
|
217
|
-
useOnClickOutside(
|
|
218
|
-
[ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],
|
|
219
|
-
(evt) => {
|
|
220
|
-
onPointerDownOutside?.(evt);
|
|
221
|
-
if (!evt.defaultPrevented) {
|
|
222
|
-
ctx?.setOpen(false);
|
|
223
|
-
}
|
|
224
|
-
},
|
|
225
|
-
open
|
|
226
|
-
);
|
|
227
|
-
React4__namespace.useEffect(() => {
|
|
228
|
-
if (!open) return;
|
|
229
|
-
const onKey = (e) => {
|
|
230
|
-
if (e.key !== "Escape") return;
|
|
231
|
-
onEscapeKeyDown?.(e);
|
|
232
|
-
if (!e.defaultPrevented) {
|
|
233
|
-
ctx?.setOpen(false);
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
document.addEventListener("keydown", onKey);
|
|
237
|
-
return () => document.removeEventListener("keydown", onKey);
|
|
238
|
-
}, [ctx, onEscapeKeyDown, open]);
|
|
239
|
-
if (!ctx || !open) return null;
|
|
240
|
-
return /* @__PURE__ */ React4__namespace.createElement(DialogPortal, null, /* @__PURE__ */ React4__namespace.createElement(DialogOverlay, { className: overlayClassName }), /* @__PURE__ */ React4__namespace.createElement(
|
|
241
|
-
"div",
|
|
242
|
-
{
|
|
243
|
-
ref: mergeRefs(ctx.contentRef, ref),
|
|
244
|
-
className: chunkY7WHUKJF_js.cn(
|
|
245
|
-
"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg",
|
|
246
|
-
className
|
|
247
|
-
),
|
|
248
|
-
...props
|
|
249
|
-
},
|
|
250
|
-
children,
|
|
251
|
-
showCloseButton ? /* @__PURE__ */ React4__namespace.createElement(DialogClose, { className: "absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100" }, /* @__PURE__ */ React4__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React4__namespace.createElement("span", { className: "sr-only" }, "Close")) : null
|
|
252
|
-
));
|
|
253
|
-
}
|
|
254
|
-
);
|
|
255
|
-
DialogContent.displayName = "DialogContent";
|
|
256
|
-
var DialogHeader = ({
|
|
257
|
-
className,
|
|
258
|
-
...props
|
|
259
|
-
}) => /* @__PURE__ */ React4__namespace.createElement(
|
|
260
|
-
"div",
|
|
261
|
-
{
|
|
262
|
-
className: chunkY7WHUKJF_js.cn(
|
|
263
|
-
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
264
|
-
className
|
|
265
|
-
),
|
|
266
|
-
...props
|
|
267
|
-
}
|
|
268
|
-
);
|
|
269
|
-
DialogHeader.displayName = "DialogHeader";
|
|
270
|
-
var DialogFooter = ({
|
|
271
|
-
className,
|
|
272
|
-
...props
|
|
273
|
-
}) => /* @__PURE__ */ React4__namespace.createElement(
|
|
274
|
-
"div",
|
|
275
|
-
{
|
|
276
|
-
className: chunkY7WHUKJF_js.cn(
|
|
277
|
-
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
278
|
-
className
|
|
279
|
-
),
|
|
280
|
-
...props
|
|
281
|
-
}
|
|
282
|
-
);
|
|
283
|
-
DialogFooter.displayName = "DialogFooter";
|
|
284
|
-
var DialogTitle = React4__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React4__namespace.createElement(
|
|
285
|
-
"h2",
|
|
286
|
-
{
|
|
287
|
-
ref,
|
|
288
|
-
className: chunkY7WHUKJF_js.cn(
|
|
289
|
-
"text-lg font-semibold leading-none tracking-tight",
|
|
290
|
-
className
|
|
291
|
-
),
|
|
292
|
-
...props
|
|
293
|
-
}
|
|
294
|
-
));
|
|
295
|
-
DialogTitle.displayName = "DialogTitle";
|
|
296
|
-
var DialogDescription = React4__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React4__namespace.createElement(
|
|
297
|
-
"p",
|
|
298
|
-
{
|
|
299
|
-
ref,
|
|
300
|
-
className: chunkY7WHUKJF_js.cn("text-sm text-muted-foreground", className),
|
|
301
|
-
...props
|
|
302
|
-
}
|
|
303
|
-
));
|
|
304
|
-
DialogDescription.displayName = "DialogDescription";
|
|
305
|
-
|
|
306
|
-
exports.Button = Button;
|
|
307
|
-
exports.Dialog = Dialog;
|
|
308
|
-
exports.DialogClose = DialogClose;
|
|
309
|
-
exports.DialogContent = DialogContent;
|
|
310
|
-
exports.DialogDescription = DialogDescription;
|
|
311
|
-
exports.DialogFooter = DialogFooter;
|
|
312
|
-
exports.DialogHeader = DialogHeader;
|
|
313
|
-
exports.DialogOverlay = DialogOverlay;
|
|
314
|
-
exports.DialogPortal = DialogPortal;
|
|
315
|
-
exports.DialogTitle = DialogTitle;
|
|
316
|
-
exports.DialogTrigger = DialogTrigger;
|
|
317
|
-
exports.Input = Input;
|
|
318
|
-
exports.Portal = Portal;
|
|
319
|
-
exports.buttonVariants = buttonVariants;
|
|
320
|
-
exports.mergeRefs = mergeRefs;
|
|
321
|
-
exports.useControllableState = useControllableState;
|
|
322
|
-
exports.useOnClickOutside = useOnClickOutside;
|
|
323
|
-
//# sourceMappingURL=chunk-7PMT4L4I.js.map
|
|
324
|
-
//# sourceMappingURL=chunk-7PMT4L4I.js.map
|