@fuzdev/fuz_app 0.3.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/actions/action_bridge.js +1 -1
  2. package/dist/actions/action_spec.d.ts +8 -8
  3. package/dist/actions/action_spec.d.ts.map +1 -1
  4. package/dist/actions/action_spec.js +2 -2
  5. package/dist/http/db_routes.d.ts.map +1 -1
  6. package/dist/http/db_routes.js +4 -2
  7. package/dist/http/schema_helpers.d.ts +3 -3
  8. package/dist/http/schema_helpers.d.ts.map +1 -1
  9. package/dist/http/schema_helpers.js +5 -10
  10. package/dist/ui/AdminAuditLog.svelte +2 -2
  11. package/dist/ui/AdminInvites.svelte +2 -2
  12. package/dist/ui/AdminSurface.svelte +3 -3
  13. package/dist/ui/BootstrapForm.svelte +4 -4
  14. package/dist/ui/Datatable.svelte +3 -3
  15. package/dist/ui/LoginForm.svelte +2 -2
  16. package/dist/ui/LogoutButton.svelte +1 -1
  17. package/dist/ui/SignupForm.svelte +4 -4
  18. package/dist/ui/SurfaceExplorer.svelte +3 -3
  19. package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -1
  20. package/dist/ui/account_sessions_state.svelte.js +1 -1
  21. package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -1
  22. package/dist/ui/admin_accounts_state.svelte.js +2 -2
  23. package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -1
  24. package/dist/ui/admin_invites_state.svelte.js +2 -2
  25. package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -1
  26. package/dist/ui/admin_sessions_state.svelte.js +1 -1
  27. package/dist/ui/app_settings_state.svelte.d.ts.map +1 -1
  28. package/dist/ui/app_settings_state.svelte.js +2 -2
  29. package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
  30. package/dist/ui/audit_log_state.svelte.js +3 -3
  31. package/dist/ui/auth_state.svelte.d.ts.map +1 -1
  32. package/dist/ui/auth_state.svelte.js +6 -6
  33. package/dist/ui/form_state.svelte.d.ts +1 -1
  34. package/dist/ui/form_state.svelte.js +2 -2
  35. package/dist/ui/loadable.svelte.d.ts +1 -1
  36. package/dist/ui/loadable.svelte.d.ts.map +1 -1
  37. package/dist/ui/loadable.svelte.js +4 -4
  38. package/dist/ui/popover.svelte.d.ts.map +1 -1
  39. package/dist/ui/popover.svelte.js +6 -6
  40. package/dist/ui/sidebar_state.svelte.js +2 -2
  41. package/dist/ui/table_state.svelte.d.ts.map +1 -1
  42. package/dist/ui/table_state.svelte.js +9 -9
  43. package/package.json +1 -1
@@ -19,7 +19,7 @@ export const map_action_auth = (auth) => {
19
19
  };
20
20
  /** Derive the default HTTP method from side effects. */
21
21
  export const derive_http_method = (side_effects) => {
22
- return side_effects === true ? 'POST' : 'GET';
22
+ return side_effects ? 'POST' : 'GET';
23
23
  };
24
24
  /**
25
25
  * Derive a `RouteSpec` from an `ActionSpec` and options.
@@ -29,7 +29,7 @@ export declare const ActionAuth: z.ZodUnion<readonly [z.ZodLiteral<"public">, z.
29
29
  role: z.ZodString;
30
30
  }, z.core.$strict>]>;
31
31
  export type ActionAuth = z.infer<typeof ActionAuth>;
32
- export declare const ActionSideEffects: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodNull]>;
32
+ export declare const ActionSideEffects: z.ZodBoolean;
33
33
  export type ActionSideEffects = z.infer<typeof ActionSideEffects>;
34
34
  export declare const ActionSpec: z.ZodObject<{
35
35
  method: z.ZodString;
@@ -46,7 +46,7 @@ export declare const ActionSpec: z.ZodObject<{
46
46
  auth: z.ZodNullable<z.ZodUnion<readonly [z.ZodLiteral<"public">, z.ZodLiteral<"authenticated">, z.ZodLiteral<"keeper">, z.ZodObject<{
47
47
  role: z.ZodString;
48
48
  }, z.core.$strict>]>>;
49
- side_effects: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodNull]>;
49
+ side_effects: z.ZodBoolean;
50
50
  input: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
51
51
  output: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
52
52
  async: z.ZodBoolean;
@@ -60,7 +60,7 @@ export declare const RequestResponseActionSpec: z.ZodObject<{
60
60
  frontend: "frontend";
61
61
  backend: "backend";
62
62
  }>;
63
- side_effects: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodNull]>;
63
+ side_effects: z.ZodBoolean;
64
64
  input: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
65
65
  output: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
66
66
  description: z.ZodString;
@@ -82,7 +82,7 @@ export declare const RemoteNotificationActionSpec: z.ZodObject<{
82
82
  description: z.ZodString;
83
83
  kind: z.ZodDefault<z.ZodLiteral<"remote_notification">>;
84
84
  auth: z.ZodDefault<z.ZodNull>;
85
- side_effects: z.ZodDefault<z.ZodNullable<z.ZodLiteral<true>>>;
85
+ side_effects: z.ZodDefault<z.ZodLiteral<true>>;
86
86
  output: z.ZodCustom<z.ZodVoid, z.ZodVoid>;
87
87
  async: z.ZodDefault<z.ZodLiteral<true>>;
88
88
  }, z.core.$strict>;
@@ -98,7 +98,7 @@ export declare const LocalCallActionSpec: z.ZodObject<{
98
98
  frontend: "frontend";
99
99
  backend: "backend";
100
100
  }>;
101
- side_effects: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodNull]>;
101
+ side_effects: z.ZodBoolean;
102
102
  input: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
103
103
  output: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
104
104
  async: z.ZodBoolean;
@@ -114,7 +114,7 @@ export declare const ActionSpecUnion: z.ZodUnion<readonly [z.ZodObject<{
114
114
  frontend: "frontend";
115
115
  backend: "backend";
116
116
  }>;
117
- side_effects: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodNull]>;
117
+ side_effects: z.ZodBoolean;
118
118
  input: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
119
119
  output: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
120
120
  description: z.ZodString;
@@ -134,7 +134,7 @@ export declare const ActionSpecUnion: z.ZodUnion<readonly [z.ZodObject<{
134
134
  description: z.ZodString;
135
135
  kind: z.ZodDefault<z.ZodLiteral<"remote_notification">>;
136
136
  auth: z.ZodDefault<z.ZodNull>;
137
- side_effects: z.ZodDefault<z.ZodNullable<z.ZodLiteral<true>>>;
137
+ side_effects: z.ZodDefault<z.ZodLiteral<true>>;
138
138
  output: z.ZodCustom<z.ZodVoid, z.ZodVoid>;
139
139
  async: z.ZodDefault<z.ZodLiteral<true>>;
140
140
  }, z.core.$strict>, z.ZodObject<{
@@ -144,7 +144,7 @@ export declare const ActionSpecUnion: z.ZodUnion<readonly [z.ZodObject<{
144
144
  frontend: "frontend";
145
145
  backend: "backend";
146
146
  }>;
147
- side_effects: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodNull]>;
147
+ side_effects: z.ZodBoolean;
148
148
  input: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
149
149
  output: z.ZodCustom<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
150
150
  async: z.ZodBoolean;
@@ -1 +1 @@
1
- {"version":3,"file":"action_spec.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,UAAU;;;;EAAoE,CAAC;AAC5F,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,eAAe;;;;EAA0C,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,UAAU;;oBAKrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,iBAAiB,sDAAuC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;kBAUrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;kBAIpC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;kBAMvC,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;kBAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAI1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,eAKoB,CAAC;AAE9E,eAAO,MAAM,gBAAgB;;;;;;;;;;EAU3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"action_spec.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,UAAU;;;;EAAoE,CAAC;AAC5F,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,eAAe;;;;EAA0C,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,UAAU;;oBAKrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;kBAUrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;kBAIpC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;kBAMvC,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;kBAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAI1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,eAKoB,CAAC;AAE9E,eAAO,MAAM,gBAAgB;;;;;;;;;;EAU3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -21,7 +21,7 @@ export const ActionAuth = z.union([
21
21
  z.literal('keeper'),
22
22
  z.strictObject({ role: z.string() }),
23
23
  ]);
24
- export const ActionSideEffects = z.union([z.literal(true), z.null()]);
24
+ export const ActionSideEffects = z.boolean();
25
25
  export const ActionSpec = z.strictObject({
26
26
  method: z.string(),
27
27
  kind: ActionKind,
@@ -41,7 +41,7 @@ export const RequestResponseActionSpec = ActionSpec.extend({
41
41
  export const RemoteNotificationActionSpec = ActionSpec.extend({
42
42
  kind: z.literal('remote_notification').default('remote_notification'),
43
43
  auth: z.null().default(null),
44
- side_effects: z.literal(true).nullable().default(true),
44
+ side_effects: z.literal(true).default(true),
45
45
  output: z.custom((v) => v instanceof z.ZodVoid),
46
46
  async: z.literal(true).default(true),
47
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"db_routes.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/http/db_routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAC,EAAE,EAAE,MAAM,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAmB,KAAK,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAWjE;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,cAAc,KAAG,KAAK,CAAC,SAAS,CAqN9E,CAAC"}
1
+ {"version":3,"file":"db_routes.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/http/db_routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAC,EAAE,EAAE,MAAM,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAmB,KAAK,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAWjE;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,cAAc,KAAG,KAAK,CAAC,SAAS,CAuN9E,CAAC"}
@@ -57,7 +57,9 @@ export const create_db_route_specs = (options) => {
57
57
  auth: { type: 'keeper' },
58
58
  description: 'List public tables with row counts',
59
59
  input: z.null(),
60
- output: z.looseObject({ tables: z.array(z.object({ name: z.string(), row_count: z.number() })) }),
60
+ output: z.looseObject({
61
+ tables: z.array(z.strictObject({ name: z.string(), row_count: z.number() })),
62
+ }),
61
63
  handler: async (c, route) => {
62
64
  const table_names = await route.db.query(`SELECT table_name FROM information_schema.tables
63
65
  WHERE table_schema = 'public'
@@ -83,7 +85,7 @@ export const create_db_route_specs = (options) => {
83
85
  input: z.null(),
84
86
  errors: { 404: z.looseObject({ error: z.literal(ERROR_TABLE_NOT_FOUND) }) },
85
87
  output: z.looseObject({
86
- columns: z.array(z.object({ column_name: z.string(), data_type: z.string(), is_nullable: z.string() })),
88
+ columns: z.array(z.strictObject({ column_name: z.string(), data_type: z.string(), is_nullable: z.string() })),
87
89
  rows: z.array(z.record(z.string(), z.unknown())),
88
90
  total: z.number(),
89
91
  offset: z.number(),
@@ -13,9 +13,9 @@ import { type RateLimitKey, type RouteErrorSchemas } from './error_schemas.js';
13
13
  /**
14
14
  * Check if a schema is exactly `z.null()`.
15
15
  *
16
- * Uses Zod 4 type introspection (`_zod.def.type`) rather than runtime parsing
17
- * to avoid false positives from `z.nullable(z.string())` or similar schemas
18
- * that accept null but also accept other values.
16
+ * Uses `instanceof` rather than runtime parsing to avoid false positives
17
+ * from `z.nullable(z.string())` or similar schemas that accept null
18
+ * but also accept other values.
19
19
  */
20
20
  export declare const is_null_schema: (schema: z.ZodType) => boolean;
21
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"schema_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/http/schema_helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAuB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAA0C,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAI3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAcrD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,EAAE,YAAY,MAAM,KAAG,OAQxE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAC/B,MAAM;IACL,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC3B,EACD,oBAAoB,iBAAiB,GAAG,IAAI,KAC1C,iBAAiB,GAAG,IAUtB,CAAC"}
1
+ {"version":3,"file":"schema_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/http/schema_helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAuB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAEnG;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAAsC,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OACe,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAcrD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,EAAE,YAAY,MAAM,KAAG,OAQxE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAC/B,MAAM;IACL,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC3B,EACD,oBAAoB,iBAAiB,GAAG,IAAI,KAC1C,iBAAiB,GAAG,IAUtB,CAAC"}
@@ -12,23 +12,18 @@ import { derive_error_schemas } from './error_schemas.js';
12
12
  /**
13
13
  * Check if a schema is exactly `z.null()`.
14
14
  *
15
- * Uses Zod 4 type introspection (`_zod.def.type`) rather than runtime parsing
16
- * to avoid false positives from `z.nullable(z.string())` or similar schemas
17
- * that accept null but also accept other values.
15
+ * Uses `instanceof` rather than runtime parsing to avoid false positives
16
+ * from `z.nullable(z.string())` or similar schemas that accept null
17
+ * but also accept other values.
18
18
  */
19
- export const is_null_schema = (schema) => schema._zod.def.type === 'null';
19
+ export const is_null_schema = (schema) => schema instanceof z.ZodNull;
20
20
  /**
21
21
  * Check if a schema is a strict object (`z.strictObject()`).
22
22
  *
23
23
  * Strict objects set `catchall` to `ZodNever` to reject unknown keys.
24
24
  * Regular `z.object()` has `catchall: undefined` (strips unknown keys in Zod 4).
25
25
  */
26
- export const is_strict_object_schema = (schema) => {
27
- if (schema._zod.def.type !== 'object')
28
- return false;
29
- const catchall = schema._zod.def.catchall;
30
- return catchall?._zod.def.type === 'never';
31
- };
26
+ export const is_strict_object_schema = (schema) => schema instanceof z.ZodObject && schema.def.catchall instanceof z.ZodNever;
32
27
  /**
33
28
  * Convert a Zod schema to a JSON-serializable representation for the surface.
34
29
  *
@@ -17,8 +17,8 @@
17
17
 
18
18
  const audit_log = new AuditLogState();
19
19
 
20
- let filter_event_type: string = $state('');
21
- let streaming = $state(false);
20
+ let filter_event_type: string = $state.raw('');
21
+ let streaming = $state.raw(false);
22
22
 
23
23
  const load = (): void => {
24
24
  void audit_log.fetch(filter_event_type ? {event_type: filter_event_type} : undefined);
@@ -11,8 +11,8 @@
11
11
 
12
12
  const admin_invites = new AdminInvitesState();
13
13
 
14
- let invite_email = $state('');
15
- let invite_username = $state('');
14
+ let invite_email = $state.raw('');
15
+ let invite_username = $state.raw('');
16
16
 
17
17
  const can_create = $derived(
18
18
  (invite_email.trim() || invite_username.trim()) && !admin_invites.creating,
@@ -3,9 +3,9 @@
3
3
  import SurfaceExplorer from './SurfaceExplorer.svelte';
4
4
  import {ui_fetch} from './ui_fetch.js';
5
5
 
6
- let surface: AppSurface | null = $state(null);
7
- let loading = $state(true);
8
- let error: string | null = $state(null);
6
+ let surface: AppSurface | null = $state.raw(null);
7
+ let loading = $state.raw(true);
8
+ let error: string | null = $state.raw(null);
9
9
 
10
10
  const load = async (): Promise<void> => {
11
11
  loading = true;
@@ -10,10 +10,10 @@
10
10
  const auth_state = auth_state_context.get();
11
11
  const form_state = new FormState();
12
12
 
13
- let token = $state('');
14
- let username = $state('');
15
- let password = $state('');
16
- let password_confirm = $state('');
13
+ let token = $state.raw('');
14
+ let username = $state.raw('');
15
+ let password = $state.raw('');
16
+ let password_confirm = $state.raw('');
17
17
 
18
18
  const username_valid = $derived(Username.safeParse(username).success);
19
19
  const passwords_match = $derived(password === password_confirm);
@@ -44,9 +44,9 @@
44
44
  const grid_template_columns = $derived(column_widths.map((w) => `${w}px`).join(' '));
45
45
 
46
46
  // column resize
47
- let resize_col_index: number | null = $state(null);
48
- let resize_start_x = $state(0);
49
- let resize_start_width = $state(0);
47
+ let resize_col_index: number | null = $state.raw(null);
48
+ let resize_start_x = $state.raw(0);
49
+ let resize_start_width = $state.raw(0);
50
50
 
51
51
  const handle_resize_start = (e: PointerEvent, index: number): void => {
52
52
  e.preventDefault();
@@ -18,8 +18,8 @@
18
18
  const auth_state = auth_state_context.get();
19
19
  const form_state = new FormState();
20
20
 
21
- let username = $state('');
22
- let password = $state('');
21
+ let username = $state.raw('');
22
+ let password = $state.raw('');
23
23
 
24
24
  const handle_login = async (): Promise<void> => {
25
25
  const u = username.trim();
@@ -15,7 +15,7 @@
15
15
 
16
16
  const auth_state = auth_state_context.get();
17
17
 
18
- let pending = $state(false);
18
+ let pending = $state.raw(false);
19
19
  </script>
20
20
 
21
21
  <PendingButton
@@ -18,10 +18,10 @@
18
18
  const auth_state = auth_state_context.get();
19
19
  const form_state = new FormState();
20
20
 
21
- let username = $state('');
22
- let email = $state('');
23
- let password = $state('');
24
- let password_confirm = $state('');
21
+ let username = $state.raw('');
22
+ let email = $state.raw('');
23
+ let password = $state.raw('');
24
+ let password_confirm = $state.raw('');
25
25
 
26
26
  const username_valid = $derived(Username.safeParse(username).success);
27
27
  const passwords_match = $derived(password === password_confirm);
@@ -12,8 +12,8 @@
12
12
 
13
13
  const auth_types = ['all', 'none', 'authenticated', 'role', 'keeper'] as const;
14
14
 
15
- let auth_filter: (typeof auth_types)[number] = $state('all');
16
- let expanded_route: string | null = $state(null);
15
+ let auth_filter: (typeof auth_types)[number] = $state.raw('all');
16
+ let expanded_route: string | null = $state.raw(null);
17
17
 
18
18
  const summary = $derived(surface_auth_summary(surface));
19
19
 
@@ -23,7 +23,7 @@
23
23
  : surface.routes.filter((r) => r.auth.type === auth_filter),
24
24
  );
25
25
 
26
- let expanded_event: string | null = $state(null);
26
+ let expanded_event: string | null = $state.raw(null);
27
27
 
28
28
  const toggle_route = (key: string): void => {
29
29
  expanded_route = expanded_route === key ? null : key;
@@ -1 +1 @@
1
- {"version":3,"file":"account_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/account_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAE3D,qBAAa,oBAAqB,SAAQ,QAAQ;IACjD,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAc;IAE1C,QAAQ,CAAC,YAAY,SAAkC;IAEjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAajC"}
1
+ {"version":3,"file":"account_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/account_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAE3D,qBAAa,oBAAqB,SAAQ,QAAQ;IACjD,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAkB;IAE9C,QAAQ,CAAC,YAAY,SAAkC;IAEjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAajC"}
@@ -6,7 +6,7 @@
6
6
  import { Loadable } from './loadable.svelte.js';
7
7
  import { parse_response_error, ui_fetch } from './ui_fetch.js';
8
8
  export class AccountSessionsState extends Loadable {
9
- sessions = $state([]);
9
+ sessions = $state.raw([]);
10
10
  active_count = $derived(this.sessions.length);
11
11
  async fetch() {
12
12
  await this.run(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"admin_accounts_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_accounts_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAErE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC/C,QAAQ,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAc;IACpD,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAc;IAC5C,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAC5D,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAE3D,QAAQ,CAAC,aAAa,SAAkC;IAElD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzE"}
1
+ {"version":3,"file":"admin_accounts_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_accounts_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAErE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC/C,QAAQ,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAkB;IACxD,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAkB;IAChD,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAC5D,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAE3D,QAAQ,CAAC,aAAa,SAAkC;IAElD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzE"}
@@ -7,8 +7,8 @@ import { SvelteSet } from 'svelte/reactivity';
7
7
  import { Loadable } from './loadable.svelte.js';
8
8
  import { parse_response_error, ui_fetch } from './ui_fetch.js';
9
9
  export class AdminAccountsState extends Loadable {
10
- accounts = $state([]);
11
- grantable_roles = $state([]);
10
+ accounts = $state.raw([]);
11
+ grantable_roles = $state.raw([]);
12
12
  granting_keys = new SvelteSet();
13
13
  revoking_ids = new SvelteSet();
14
14
  account_count = $derived(this.accounts.length);
@@ -1 +1 @@
1
- {"version":3,"file":"admin_invites_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_invites_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEtE,qBAAa,iBAAkB,SAAQ,QAAQ;IAC9C,OAAO,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAc;IACrD,QAAQ,UAAiB;IACzB,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAE3D,QAAQ,CAAC,YAAY,SAAiC;IACtD,QAAQ,CAAC,eAAe,SAA8D;IAEhF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BlE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9C"}
1
+ {"version":3,"file":"admin_invites_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_invites_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AAEtE,qBAAa,iBAAkB,SAAQ,QAAQ;IAC9C,OAAO,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAkB;IACzD,QAAQ,UAAqB;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAE3D,QAAQ,CAAC,YAAY,SAAiC;IACtD,QAAQ,CAAC,eAAe,SAA8D;IAEhF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BlE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9C"}
@@ -7,8 +7,8 @@ import { SvelteSet } from 'svelte/reactivity';
7
7
  import { Loadable } from './loadable.svelte.js';
8
8
  import { parse_response_error, ui_fetch } from './ui_fetch.js';
9
9
  export class AdminInvitesState extends Loadable {
10
- invites = $state([]);
11
- creating = $state(false);
10
+ invites = $state.raw([]);
11
+ creating = $state.raw(false);
12
12
  deleting_ids = new SvelteSet();
13
13
  invite_count = $derived(this.invites.length);
14
14
  unclaimed_count = $derived(this.invites.filter((i) => !i.claimed_at).length);
@@ -1 +1 @@
1
- {"version":3,"file":"admin_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAElE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC/C,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAc;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IACnE,QAAQ,CAAC,0BAA0B,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAEzE,QAAQ,CAAC,YAAY,SAAkC;IAEjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBtE"}
1
+ {"version":3,"file":"admin_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAElE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC/C,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAkB;IACnD,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IACnE,QAAQ,CAAC,0BAA0B,EAAE,SAAS,CAAC,MAAM,CAAC,CAAmB;IAEzE,QAAQ,CAAC,YAAY,SAAkC;IAEjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBtE"}
@@ -7,7 +7,7 @@ import { SvelteSet } from 'svelte/reactivity';
7
7
  import { Loadable } from './loadable.svelte.js';
8
8
  import { parse_response_error, ui_fetch } from './ui_fetch.js';
9
9
  export class AdminSessionsState extends Loadable {
10
- sessions = $state([]);
10
+ sessions = $state.raw([]);
11
11
  revoking_account_ids = new SvelteSet();
12
12
  revoking_token_account_ids = new SvelteSet();
13
13
  active_count = $derived(this.sessions.length);
@@ -1 +1 @@
1
- {"version":3,"file":"app_settings_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/app_settings_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,gCAAgC,CAAC;AAEhF,qBAAa,gBAAiB,SAAQ,QAAQ;IAC7C,QAAQ,EAAE,2BAA2B,GAAG,IAAI,CAAgB;IAC5D,QAAQ,UAAiB;IAEnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBvD"}
1
+ {"version":3,"file":"app_settings_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/app_settings_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,gCAAgC,CAAC;AAEhF,qBAAa,gBAAiB,SAAQ,QAAQ;IAC7C,QAAQ,EAAE,2BAA2B,GAAG,IAAI,CAAoB;IAChE,QAAQ,UAAqB;IAEvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBvD"}
@@ -6,8 +6,8 @@
6
6
  import { Loadable } from './loadable.svelte.js';
7
7
  import { parse_response_error, ui_fetch } from './ui_fetch.js';
8
8
  export class AppSettingsState extends Loadable {
9
- settings = $state(null);
10
- updating = $state(false);
9
+ settings = $state.raw(null);
10
+ updating = $state.raw(false);
11
11
  async fetch() {
12
12
  await this.run(async () => {
13
13
  const response = await ui_fetch('/api/admin/settings');
@@ -1 +1 @@
1
- {"version":3,"file":"audit_log_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/audit_log_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAEX,8BAA8B,EAC9B,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAGrC,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAc,SAAQ,QAAQ;;IAC1C,MAAM,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAc;IAC3D,qBAAqB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAc;IAElE,QAAQ,CAAC,KAAK,SAAgC;IAE9C,qDAAqD;IACrD,SAAS,UAAiB;gBAWd,UAAU,SAAgC;IAKhD,KAAK,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1E;;;;;;;OAOG;IACH,SAAS,IAAI,MAAM,IAAI;IA0CvB,gCAAgC;IAChC,UAAU,IAAI,IAAI;CAmClB"}
1
+ {"version":3,"file":"audit_log_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/audit_log_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAEX,8BAA8B,EAC9B,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAGrC,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAc,SAAQ,QAAQ;;IAC1C,MAAM,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAkB;IAC/D,qBAAqB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAkB;IAEtE,QAAQ,CAAC,KAAK,SAAgC;IAE9C,qDAAqD;IACrD,SAAS,UAAqB;gBAWlB,UAAU,SAAgC;IAKhD,KAAK,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1E;;;;;;;OAOG;IACH,SAAS,IAAI,MAAM,IAAI;IA0CvB,gCAAgC;IAChC,UAAU,IAAI,IAAI;CAmClB"}
@@ -10,11 +10,11 @@ import { DEV } from 'esm-env';
10
10
  import { Loadable } from './loadable.svelte.js';
11
11
  import { parse_response_error, ui_fetch } from './ui_fetch.js';
12
12
  export class AuditLogState extends Loadable {
13
- events = $state([]);
14
- permit_history_events = $state([]);
13
+ events = $state.raw([]);
14
+ permit_history_events = $state.raw([]);
15
15
  count = $derived(this.events.length);
16
16
  /** Whether the SSE stream is currently connected. */
17
- connected = $state(false);
17
+ connected = $state.raw(false);
18
18
  /** The highest `seq` seen — used for gap fill on reconnection. */
19
19
  #last_seq = null;
20
20
  /** Active EventSource instance. */
@@ -1 +1 @@
1
- {"version":3,"file":"auth_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/auth_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,EAAC,KAAK,MAAM,EAAoB,KAAK,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAE7F,qBAAa,SAAS;IACrB,SAAS,UAAiB;IAC1B,QAAQ,UAAiB;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAgB;IAC3C,OAAO,EAAE,cAAc,GAAG,IAAI,CAAgB;IAC9C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAc;IACpC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAEpC;IACF,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAoD;IAEjF,gEAAgE;IAChE,eAAe,UAAiB;IAEhC;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BpC;;;;OAIG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwCjE;;;;OAIG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCpF;;;;OAIG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4ClF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;CAA8B,CAAC"}
1
+ {"version":3,"file":"auth_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/auth_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,EAAC,KAAK,MAAM,EAAoB,KAAK,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAE7F,qBAAa,SAAS;IACrB,SAAS,UAAqB;IAC9B,QAAQ,UAAqB;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAoB;IAC/C,OAAO,EAAE,cAAc,GAAG,IAAI,CAAoB;IAClD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAkB;IACxC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAEpC;IACF,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAoD;IAEjF,gEAAgE;IAChE,eAAe,UAAqB;IAEpC;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BpC;;;;OAIG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwCjE;;;;OAIG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCpF;;;;OAIG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4ClF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;CAA8B,CAAC"}
@@ -35,15 +35,15 @@ import { create_context } from '@fuzdev/fuz_ui/context_helpers.js';
35
35
  import { ui_fetch } from './ui_fetch.js';
36
36
  import { is_permit_active } from '../auth/account_schema.js';
37
37
  export class AuthState {
38
- verifying = $state(false);
39
- verified = $state(false);
40
- verify_error = $state(null);
41
- account = $state(null);
42
- permits = $state([]);
38
+ verifying = $state.raw(false);
39
+ verified = $state.raw(false);
40
+ verify_error = $state.raw(null);
41
+ account = $state.raw(null);
42
+ permits = $state.raw([]);
43
43
  active_permits = $derived(this.permits.filter((p) => is_permit_active(p)));
44
44
  roles = $derived(this.active_permits.map((p) => p.role));
45
45
  /** True when bootstrap is available (no accounts exist yet). */
46
- needs_bootstrap = $state(false);
46
+ needs_bootstrap = $state.raw(false);
47
47
  /**
48
48
  * Check auth state and bootstrap availability.
49
49
  *
@@ -15,7 +15,7 @@
15
15
  * ```svelte
16
16
  * <script>
17
17
  * const form_state = new FormState();
18
- * let username = $state('');
18
+ * let username = $state.raw('');
19
19
  * const username_valid = $derived(Username.safeParse(username).success);
20
20
  * const can_submit = $derived(username.trim() && username_valid);
21
21
  *
@@ -15,7 +15,7 @@
15
15
  * ```svelte
16
16
  * <script>
17
17
  * const form_state = new FormState();
18
- * let username = $state('');
18
+ * let username = $state.raw('');
19
19
  * const username_valid = $derived(Username.safeParse(username).success);
20
20
  * const can_submit = $derived(username.trim() && username_valid);
21
21
  *
@@ -48,7 +48,7 @@ const FORM_INPUT_SELECTOR = 'input, textarea, select';
48
48
  export class FormState {
49
49
  #touched = new SvelteSet();
50
50
  #form = null;
51
- #attempted = $state(false);
51
+ #attempted = $state.raw(false);
52
52
  /**
53
53
  * Whether a submit attempt has been made.
54
54
  */
@@ -8,7 +8,7 @@
8
8
  * @example
9
9
  * ```ts
10
10
  * class ItemsState extends Loadable {
11
- * items: Array<Item> = $state([]);
11
+ * items: Array<Item> = $state.raw([]);
12
12
  *
13
13
  * async fetch(): Promise<void> {
14
14
  * await this.run(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"loadable.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/loadable.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,qBAAa,QAAQ,CAAC,MAAM,GAAG,MAAM;IACpC,OAAO,UAAiB;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAgB;IAEpC,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAgB;IAEnC;;;;;;;OAOG;cACa,GAAG,CAAC,CAAC,EACpB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAChC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiBzB,wEAAwE;IACxE,KAAK,IAAI,IAAI;CAKb"}
1
+ {"version":3,"file":"loadable.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/loadable.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,qBAAa,QAAQ,CAAC,MAAM,GAAG,MAAM;IACpC,OAAO,UAAqB;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAoB;IAExC,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAoB;IAEvC;;;;;;;OAOG;cACa,GAAG,CAAC,CAAC,EACpB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAChC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiBzB,wEAAwE;IACxE,KAAK,IAAI,IAAI;CAKb"}
@@ -8,7 +8,7 @@
8
8
  * @example
9
9
  * ```ts
10
10
  * class ItemsState extends Loadable {
11
- * items: Array<Item> = $state([]);
11
+ * items: Array<Item> = $state.raw([]);
12
12
  *
13
13
  * async fetch(): Promise<void> {
14
14
  * await this.run(async () => {
@@ -36,10 +36,10 @@
36
36
  * @module
37
37
  */
38
38
  export class Loadable {
39
- loading = $state(false);
40
- error = $state(null);
39
+ loading = $state.raw(false);
40
+ error = $state.raw(null);
41
41
  /** The raw caught value from the last failed `run()`, for programmatic inspection. */
42
- error_data = $state(null);
42
+ error_data = $state.raw(null);
43
43
  /**
44
44
  * Run an async operation with loading/error handling.
45
45
  *
@@ -1 +1 @@
1
- {"version":3,"file":"popover.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/popover.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAGpC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,SAAS,EAA2B,MAAM,uBAAuB,CAAC;AAS9F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IAClE,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,gBAAgB,GAAG;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAC,CAAC;AAElG;;GAEG;AAEH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;CAElE;AAED;;GAEG;AACH,qBAAa,OAAO;;IACnB,gDAAgD;IAChD,OAAO,UAAiB;IAExB,uDAAuD;IACvD,QAAQ,EAAE,QAAQ,CAAoB;IAEtC,yCAAyC;IACzC,KAAK,EAAE,SAAS,CAAoB;IAEpC,kCAAkC;IAClC,MAAM,SAAe;IAErB,wDAAwD;IACxD,qBAAqB,UAAiB;IAEtC,oCAAoC;IACpC,aAAa,SAAc;gBAoBf,MAAM,CAAC,EAAE,iBAAiB;IAiCtC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAgEvC;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,MAAM,CAAC,OAAO,UAAgB,GAAG,IAAI;IAQrC;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAQhC;IAEF;;OAEG;IACH,OAAO,GAAI,SAAS,wBAAwB,KAAG,UAAU,CAAC,WAAW,CAAC,CAsBpE;IAEF;;OAEG;IACH,OAAO,GAAI,SAAS,wBAAwB,KAAG,UAAU,CAAC,WAAW,CAAC,CA2DpE;CACF"}
1
+ {"version":3,"file":"popover.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/popover.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAGpC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,SAAS,EAA2B,MAAM,uBAAuB,CAAC;AAS9F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IAClE,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,gBAAgB,GAAG;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAC,CAAC;AAElG;;GAEG;AAEH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;CAElE;AAED;;GAEG;AACH,qBAAa,OAAO;;IACnB,gDAAgD;IAChD,OAAO,UAAqB;IAE5B,uDAAuD;IACvD,QAAQ,EAAE,QAAQ,CAAwB;IAE1C,yCAAyC;IACzC,KAAK,EAAE,SAAS,CAAwB;IAExC,kCAAkC;IAClC,MAAM,SAAmB;IAEzB,wDAAwD;IACxD,qBAAqB,UAAqB;IAE1C,oCAAoC;IACpC,aAAa,SAAkB;gBAoBnB,MAAM,CAAC,EAAE,iBAAiB;IAiCtC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAgEvC;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,MAAM,CAAC,OAAO,UAAgB,GAAG,IAAI;IAQrC;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAQhC;IAEF;;OAEG;IACH,OAAO,GAAI,SAAS,wBAAwB,KAAG,UAAU,CAAC,WAAW,CAAC,CAsBpE;IAEF;;OAEG;IACH,OAAO,GAAI,SAAS,wBAAwB,KAAG,UAAU,CAAC,WAAW,CAAC,CA2DpE;CACF"}
@@ -55,17 +55,17 @@ const create_client_id = () => Math.random().toString(36).substring(2);
55
55
  */
56
56
  export class Popover {
57
57
  /** Whether the popover is currently visible. */
58
- visible = $state(false);
58
+ visible = $state.raw(false);
59
59
  /** Position of the popover relative to its trigger. */
60
- position = $state('bottom');
60
+ position = $state.raw('bottom');
61
61
  /** Alignment along the position edge. */
62
- align = $state('center');
62
+ align = $state.raw('center');
63
63
  /** Distance from the position. */
64
- offset = $state('0');
64
+ offset = $state.raw('0');
65
65
  /** Whether to disable closing when clicking outside. */
66
- disable_outside_click = $state(false);
66
+ disable_outside_click = $state.raw(false);
67
67
  /** Custom class for the popover. */
68
- popover_class = $state('');
68
+ popover_class = $state.raw('');
69
69
  /** Reference to the trigger element. */
70
70
  #trigger_element = null;
71
71
  /** Reference to the content element. */
@@ -1,8 +1,8 @@
1
1
  import { create_context } from '@fuzdev/fuz_ui/context_helpers.js';
2
2
  export class SidebarState {
3
3
  #get_enabled;
4
- #enabled = $state(true);
5
- #show_sidebar = $state(true);
4
+ #enabled = $state.raw(true);
5
+ #show_sidebar = $state.raw(true);
6
6
  get enabled() {
7
7
  return this.#get_enabled?.() ?? this.#enabled;
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/table_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAErD,mEAAmE;AACnE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,qBAAa,UAAW,SAAQ,QAAQ;IACvC,UAAU,EAAE,MAAM,CAAc;IAChC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAc;IACxC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAc;IAClD,KAAK,SAAa;IAClB,MAAM,SAAa;IACnB,KAAK,SAAe;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAgB;IAC1C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAgB;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAgB;IAG3C,QAAQ,CAAC,aAAa,SAAoD;IAC1E,QAAQ,CAAC,WAAW,SAAkE;IACtF,QAAQ,CAAC,QAAQ,UAA6B;IAC9C,QAAQ,CAAC,QAAQ,UAAmD;IAE9D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvE,OAAO,IAAI,IAAI;IAIf,OAAO,IAAI,IAAI;IAIT,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAoChE"}
1
+ {"version":3,"file":"table_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/table_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAErD,mEAAmE;AACnE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,qBAAa,UAAW,SAAQ,QAAQ;IACvC,UAAU,EAAE,MAAM,CAAkB;IACpC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAkB;IAC5C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAkB;IACtD,KAAK,SAAiB;IACtB,MAAM,SAAiB;IACvB,KAAK,SAAmB;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAoB;IAC9C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAoB;IAC3C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAoB;IAG/C,QAAQ,CAAC,aAAa,SAAoD;IAC1E,QAAQ,CAAC,WAAW,SAAkE;IACtF,QAAQ,CAAC,QAAQ,UAA6B;IAC9C,QAAQ,CAAC,QAAQ,UAAmD;IAE9D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvE,OAAO,IAAI,IAAI;IAIf,OAAO,IAAI,IAAI;IAIT,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAoChE"}
@@ -43,15 +43,15 @@ import { format_value } from './ui_format.js';
43
43
  /** Maximum number of rows that can be fetched in a single page. */
44
44
  export const TABLE_LIMIT_MAX = 1000;
45
45
  export class TableState extends Loadable {
46
- table_name = $state('');
47
- columns = $state([]);
48
- rows = $state([]);
49
- total = $state(0);
50
- offset = $state(0);
51
- limit = $state(100);
52
- primary_key = $state(null);
53
- deleting = $state(null);
54
- delete_error = $state(null);
46
+ table_name = $state.raw('');
47
+ columns = $state.raw([]);
48
+ rows = $state.raw([]);
49
+ total = $state.raw(0);
50
+ offset = $state.raw(0);
51
+ limit = $state.raw(100);
52
+ primary_key = $state.raw(null);
53
+ deleting = $state.raw(null);
54
+ delete_error = $state.raw(null);
55
55
  // Pagination computed values
56
56
  showing_start = $derived(this.total === 0 ? 0 : this.offset + 1);
57
57
  showing_end = $derived(Math.min(this.offset + this.rows.length, this.total));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuzdev/fuz_app",
3
- "version": "0.3.3",
3
+ "version": "0.5.0",
4
4
  "description": "fullstack app library",
5
5
  "glyph": "🗝",
6
6
  "logo": "logo.svg",