@xk2800/nextjs-template 0.7.0 → 0.7.1-beta.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.
@@ -19,6 +19,10 @@ type FileUploadProps = {
19
19
  maxFiles?: number
20
20
  maxSizeMB?: number
21
21
  disabled?: boolean
22
+ /** Drop zone icon. Pass `null` to hide it. */
23
+ icon?: React.ReactNode
24
+ /** Drop zone text. Defaults to "Drag and drop files here" (or "a file" when `multiple` is false). */
25
+ label?: React.ReactNode
22
26
  onFilesChange?: (files: File[]) => void
23
27
  className?: string
24
28
  }
@@ -42,6 +46,8 @@ function FileUpload({
42
46
  maxFiles,
43
47
  maxSizeMB,
44
48
  disabled = false,
49
+ icon = <Upload className="size-6" />,
50
+ label,
45
51
  onFilesChange,
46
52
  className,
47
53
  }: FileUploadProps) {
@@ -51,11 +57,15 @@ function FileUpload({
51
57
  const cameraRef = React.useRef<HTMLInputElement>(null)
52
58
  const galleryRef = React.useRef<HTMLInputElement>(null)
53
59
 
54
- const previews = React.useMemo(
55
- () => files.map((f) => (f.type.startsWith("image/") ? URL.createObjectURL(f) : null)),
56
- [files]
57
- )
58
- React.useEffect(() => () => previews.forEach((url) => url && URL.revokeObjectURL(url)), [previews])
60
+ // Created and revoked in the same effect: with useMemo, Strict Mode's
61
+ // simulated unmount revoked the URLs and the remount reused the dead ones.
62
+ const [previews, setPreviews] = React.useState<(string | null)[]>([])
63
+ React.useEffect(() => {
64
+ const urls = files.map((f) => (f.type.startsWith("image/") ? URL.createObjectURL(f) : null))
65
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- object URLs must be created where they're revoked
66
+ setPreviews(urls)
67
+ return () => urls.forEach((url) => url && URL.revokeObjectURL(url))
68
+ }, [files])
59
69
 
60
70
  const update = (next: File[]) => {
61
71
  setFiles(next)
@@ -133,8 +143,8 @@ function FileUpload({
133
143
  disabled && "opacity-50"
134
144
  )}
135
145
  >
136
- <Upload className="size-6" />
137
- <p>Drag and drop {multiple ? "files" : "a file"} here</p>
146
+ {icon}
147
+ <p>{label ?? `Drag and drop ${multiple ? "files" : "a file"} here`}</p>
138
148
  {buttons}
139
149
  </div>
140
150
  ) : (
@@ -1,4 +1,4 @@
1
- import { A as ActivityActionEnum } from '../schema-BNSBWNjK.mjs';
1
+ import { A as ActivityActionEnum } from '../schema-UuqxoOzS.mjs';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/pg-core';
4
4
 
@@ -1,4 +1,4 @@
1
- import { A as ActivityActionEnum } from '../schema-BNSBWNjK.js';
1
+ import { A as ActivityActionEnum } from '../schema-UuqxoOzS.js';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/pg-core';
4
4
 
@@ -891,7 +891,7 @@ declare function createAuth(overrides?: AuthOverrides): better_auth.Auth<{
891
891
  $Infer: {
892
892
  body: {
893
893
  permissions: {
894
- readonly user?: ("set-role" | "delete" | "update" | "list" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
894
+ readonly user?: ("delete" | "update" | "list" | "set-role" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
895
895
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
896
896
  };
897
897
  } & {
@@ -3175,7 +3175,7 @@ declare const auth: better_auth.Auth<{
3175
3175
  $Infer: {
3176
3176
  body: {
3177
3177
  permissions: {
3178
- readonly user?: ("set-role" | "delete" | "update" | "list" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
3178
+ readonly user?: ("delete" | "update" | "list" | "set-role" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
3179
3179
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
3180
3180
  };
3181
3181
  } & {
@@ -891,7 +891,7 @@ declare function createAuth(overrides?: AuthOverrides): better_auth.Auth<{
891
891
  $Infer: {
892
892
  body: {
893
893
  permissions: {
894
- readonly user?: ("set-role" | "delete" | "update" | "list" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
894
+ readonly user?: ("delete" | "update" | "list" | "set-role" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
895
895
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
896
896
  };
897
897
  } & {
@@ -3175,7 +3175,7 @@ declare const auth: better_auth.Auth<{
3175
3175
  $Infer: {
3176
3176
  body: {
3177
3177
  permissions: {
3178
- readonly user?: ("set-role" | "delete" | "update" | "list" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
3178
+ readonly user?: ("delete" | "update" | "list" | "set-role" | "create" | "ban" | "impersonate" | "impersonate-admins" | "set-password" | "set-email" | "get")[] | undefined;
3179
3179
  readonly session?: ("delete" | "list" | "revoke")[] | undefined;
3180
3180
  };
3181
3181
  } & {
@@ -1,4 +1,4 @@
1
- import { a as schema } from '../schema-BNSBWNjK.mjs';
1
+ import { a as schema } from '../schema-UuqxoOzS.mjs';
2
2
  import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
3
3
  import { NeonHttpDatabase } from 'drizzle-orm/neon-http';
4
4
  import 'drizzle-orm';
@@ -1,4 +1,4 @@
1
- import { a as schema } from '../schema-BNSBWNjK.js';
1
+ import { a as schema } from '../schema-UuqxoOzS.js';
2
2
  import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
3
3
  import { NeonHttpDatabase } from 'drizzle-orm/neon-http';
4
4
  import 'drizzle-orm';
@@ -1,3 +1,3 @@
1
1
  import 'drizzle-orm';
2
2
  import 'drizzle-orm/pg-core';
3
- export { A as ActivityActionEnum, R as RoleEnum, b as accounts, c as activityLogs, d as authThrottle, e as deviceFingerprints, f as errorRefs, p as passkeys, g as sessions, s as systemSettings, t as twoFactors, u as users, v as verifications } from '../schema-BNSBWNjK.mjs';
3
+ export { A as ActivityActionEnum, R as RoleEnum, b as accounts, c as activityLogs, d as authThrottle, e as deviceFingerprints, f as errorRefs, p as passkeys, g as sessions, s as systemSettings, t as twoFactors, u as users, v as verifications } from '../schema-UuqxoOzS.mjs';
@@ -1,3 +1,3 @@
1
1
  import 'drizzle-orm';
2
2
  import 'drizzle-orm/pg-core';
3
- export { A as ActivityActionEnum, R as RoleEnum, b as accounts, c as activityLogs, d as authThrottle, e as deviceFingerprints, f as errorRefs, p as passkeys, g as sessions, s as systemSettings, t as twoFactors, u as users, v as verifications } from '../schema-BNSBWNjK.js';
3
+ export { A as ActivityActionEnum, R as RoleEnum, b as accounts, c as activityLogs, d as authThrottle, e as deviceFingerprints, f as errorRefs, p as passkeys, g as sessions, s as systemSettings, t as twoFactors, u as users, v as verifications } from '../schema-UuqxoOzS.js';
@@ -1142,7 +1142,7 @@ declare const activityLogs: drizzle_orm_pg_core.PgTableWithColumns<{
1142
1142
  tableName: "activity_log";
1143
1143
  dataType: "string";
1144
1144
  columnType: "PgEnumColumn";
1145
- data: "login_failed" | "login" | "logout" | "password_changed" | "email_changed" | "profile_updated" | "session_revoked" | "user_deleted" | "user_banned" | "user_unbanned" | "role_changed" | "impersonation_started" | "impersonation_stopped" | "settings_changed" | "passkey_added" | "passkey_removed";
1145
+ data: "login" | "logout" | "login_failed" | "password_changed" | "email_changed" | "profile_updated" | "session_revoked" | "user_deleted" | "user_banned" | "user_unbanned" | "role_changed" | "impersonation_started" | "impersonation_stopped" | "settings_changed" | "passkey_added" | "passkey_removed";
1146
1146
  driverParam: string;
1147
1147
  notNull: true;
1148
1148
  hasDefault: false;
@@ -1142,7 +1142,7 @@ declare const activityLogs: drizzle_orm_pg_core.PgTableWithColumns<{
1142
1142
  tableName: "activity_log";
1143
1143
  dataType: "string";
1144
1144
  columnType: "PgEnumColumn";
1145
- data: "login_failed" | "login" | "logout" | "password_changed" | "email_changed" | "profile_updated" | "session_revoked" | "user_deleted" | "user_banned" | "user_unbanned" | "role_changed" | "impersonation_started" | "impersonation_stopped" | "settings_changed" | "passkey_added" | "passkey_removed";
1145
+ data: "login" | "logout" | "login_failed" | "password_changed" | "email_changed" | "profile_updated" | "session_revoked" | "user_deleted" | "user_banned" | "user_unbanned" | "role_changed" | "impersonation_started" | "impersonation_stopped" | "settings_changed" | "passkey_added" | "passkey_removed";
1146
1146
  driverParam: string;
1147
1147
  notNull: true;
1148
1148
  hasDefault: false;
@@ -1,4 +1,4 @@
1
- import { s as systemSettings } from '../schema-BNSBWNjK.mjs';
1
+ import { s as systemSettings } from '../schema-UuqxoOzS.mjs';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/pg-core';
4
4
 
@@ -1,4 +1,4 @@
1
- import { s as systemSettings } from '../schema-BNSBWNjK.js';
1
+ import { s as systemSettings } from '../schema-UuqxoOzS.js';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/pg-core';
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xk2800/nextjs-template",
3
- "version": "0.7.0",
3
+ "version": "0.7.1-beta.1",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",