@fuzdev/fuz_app 0.123.0 → 0.125.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/README.md CHANGED
@@ -14,6 +14,8 @@ fuz_app supports deploying with Deno, Node, and Bun,
14
14
  to servers, static websites, and local-first binaries, with more to come,
15
15
  eventually with compatible alternatives written in Rust.
16
16
 
17
+ This library has no AI features by design, for that see [zzz](https://github.com/fuzdev/zzz).
18
+
17
19
  For more see the <a href="https://github.com/fuzdev/fuz_app/discussions">discussions</a>.
18
20
  fuz_app is part of the Fuz stack
19
21
  ([fuz.dev](https://www.fuz.dev/), [@fuzdev](https://github.com/fuzdev)).
@@ -408,7 +408,7 @@ sets `api_token_id`, daemon-token sets both null).
408
408
  The id is the connection's only handle — `register_pending` / `add_connection`
409
409
  return it and `admit` / `remove_connection` / `is_registered` take it. There is
410
410
  no socket → id lookup: a runtime adapter may hand each socket event its own
411
- `WSContext` (`hono/bun` builds one per event), so the object a close event
411
+ `WSContext` (`@hono/bun` builds one per event), so the object a close event
412
412
  carries can't identify the connection. `register_action_ws` captures the id on
413
413
  open and removes by it.
414
414
 
@@ -772,7 +772,7 @@ export const register_action_ws = (options) => {
772
772
  stop_heartbeat_timer();
773
773
  socket_abort_controller.abort();
774
774
  // Removed by the id captured on open — an adapter may hand each
775
- // event its own `WSContext` (`hono/bun` does), so the one this
775
+ // event its own `WSContext` (`@hono/bun` does), so the one this
776
776
  // event carries can't identify the connection. And removed before
777
777
  // the hook is awaited: the socket is gone, so a slow hook must not
778
778
  // keep a dead entry that broadcasts still target and the
@@ -207,7 +207,7 @@ export declare class BackendWebsocketTransport implements FilterableBroadcastTra
207
207
  * no-op for an unknown id.
208
208
  *
209
209
  * Keyed by id rather than by `WSContext` because a runtime adapter may hand
210
- * each socket event its own context object (`hono/bun` does), so the one a
210
+ * each socket event its own context object (`@hono/bun` does), so the one a
211
211
  * close event carries can't identify the connection.
212
212
  *
213
213
  * Removal only: the socket is not closed and the registered
@@ -204,7 +204,7 @@ export class BackendWebsocketTransport {
204
204
  * no-op for an unknown id.
205
205
  *
206
206
  * Keyed by id rather than by `WSContext` because a runtime adapter may hand
207
- * each socket event its own context object (`hono/bun` does), so the one a
207
+ * each socket event its own context object (`@hono/bun` does), so the one a
208
208
  * close event carries can't identify the connection.
209
209
  *
210
210
  * Removal only: the socket is not closed and the registered
@@ -244,9 +244,13 @@ export interface AppServerOptions {
244
244
  * adapter helper services every `WsEndpointSpec` mounted from
245
245
  * `ws_endpoints` — one adapter per app.
246
246
  *
247
- * For Node, `import {upgradeWebSocket} from '@hono/node-ws'`. For
248
- * Deno, `import {upgradeWebSocket} from 'hono/deno'`. Test harnesses
249
- * use `create_stub_upgrade` from `$lib/testing/ws_round_trip.ts`.
247
+ * For Deno or Bun, `import {upgradeWebSocket} from '@hono/deno'` (or
248
+ * `'@hono/bun'`). Node's `@hono/node-ws` has no module-level helper -
249
+ * `createNodeWebSocket({app})` needs the app this function builds - so
250
+ * on Node omit this and `ws_endpoints`, then mount on the returned
251
+ * `app` with `register_ws_endpoint` and call `injectWebSocket(server)`
252
+ * after `serve()`. Test harnesses use `create_stub_upgrade` from
253
+ * `$lib/testing/ws_round_trip.ts`.
250
254
  */
251
255
  upgradeWebSocket?: UpgradeWebSocket;
252
256
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/server/app_server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/server/app_server.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface ServeStaticOptions {
20
20
  /**
21
21
  * Factory function that creates a static file serving middleware.
22
22
  *
23
- * Matches the signature of `serveStatic` from `hono/deno` and `@hono/node-server/serve-static`.
23
+ * Matches the signature of `serveStatic` from `@hono/deno` and `@hono/node-server/serve-static`.
24
24
  */
25
25
  export type ServeStaticFactory = (options: ServeStaticOptions) => MiddlewareHandler;
26
26
  /**
@@ -1744,8 +1744,8 @@ re-roll the serve / daemon-info / WS-attach / drain boilerplate:
1744
1744
 
1745
1745
  - `testing/cross_backend/testing_server_core.ts` — `start_testing_server({adapter, daemon_name, host, port, app_version?, build_app})`. Owns the runtime-neutral orchestration: open-host refusal, stale-daemon check, daemon-info write, `serve`, post-serve WS attach, graceful drain. Domain-free — the app is the caller's `build_app(): Promise<BuiltTestingApp>` seam (`{app, close, mount_websocket?}`). `mount_websocket(upgrade)` is invoked after the app exists + the adapter prepared WS (the mount-after-app order Node's `@hono/node-ws` forces — `create_app_server`'s `ws_endpoints` auto-mount can't be used on Node). Exports the `TestingServerAdapter` / `ServeHandle` / `PreparedWebsocket` interfaces.
1746
1746
  - `testing/cross_backend/testing_server_node.ts` — `create_node_testing_adapter()` (`@hono/node-server` + `@hono/node-ws`). Optional peer deps (like `ws`); only test binaries import them.
1747
- - `testing/cross_backend/testing_server_deno.ts` — `create_deno_testing_adapter()` (`Deno.serve` + `hono/deno`; `Deno` declared locally so it typechecks under the Node toolchain). Spawn the entry with `--sloppy-imports` (Deno doesn't do `.js`→`.ts`; Gro's loader does, so the Node path needs no flag).
1748
- - `testing/cross_backend/testing_server_bun.ts` — `create_bun_testing_adapter()` (`Bun.serve` + `hono/bun`'s module-level `upgradeWebSocket` + `websocket`; `Bun.serve` declared locally so it typechecks under the Node toolchain). **No extra deps** (`hono/bun` ships with `hono`; `Bun.serve` is built in, unlike Node's `@hono/node-server` + `@hono/node-ws`), and Bun resolves `.js`→`.ts` natively (no flag, unlike Deno). Reuses `create_node_runtime` (Bun implements the `node:fs`/`node:process` surface). WS is module-level + stateless (like Deno) — the `websocket` handler is threaded into `serve`, where `Bun.serve` wants it, so no post-serve attach.
1747
+ - `testing/cross_backend/testing_server_deno.ts` — `create_deno_testing_adapter()` (`Deno.serve` + `@hono/deno`, an optional peer dep; `Deno` declared locally so it typechecks under the Node toolchain). Spawn the entry with `--sloppy-imports` (Deno doesn't do `.js`→`.ts`; Gro's loader does, so the Node path needs no flag).
1748
+ - `testing/cross_backend/testing_server_bun.ts` — `create_bun_testing_adapter()` (`Bun.serve` + `@hono/bun`'s module-level `getConnInfo`, `upgradeWebSocket`, and `websocket`; `Bun.serve` declared locally so it typechecks under the Node toolchain). Needs the optional `@hono/bun` peer dep (the counterpart to Node's `@hono/node-server` + `@hono/node-ws`; `Bun.serve` is built in), and Bun resolves `.js`→`.ts` natively (no flag, unlike Deno). Reuses `create_node_runtime` (Bun implements the `node:fs`/`node:process` surface). WS is module-level + stateless (like Deno) — the `websocket` handler is threaded into `serve`, where `Bun.serve` wants it, so no post-serve attach.
1749
1749
  - `testing/cross_backend/default_spine_surface.ts` — the canonical no-domain spine surface (account/admin/audit/signup + bootstrap): `spine_session_options`, `spine_roles`, `create_spine_route_specs`, `spine_rpc_endpoints`, `create_spine_surface_spec`. This is the **declared** surface — the `create_standard_rpc_actions` bundle the spec-derived suites auto-enumerate. `$lib`-free (it's reached by the spawned binary under Gro's loader, which doesn't resolve `$lib`), so keep it on relative imports. Shared by the spine_stub cross test, the TS cross tests, and the binary.
1750
1750
  - `testing/cross_backend/full_spine_mount.ts` — `build_full_spine_rpc_actions(deps, options)` / `full_spine_rpc_endpoints(ctx, options)` — the **full** live RPC mount: the declared bundle **plus** the off-declared-surface families the binary live-mounts (`_testing_*` backdoors, the cell verb set, the opt-in `actor_lookup` / `actor_search` resolvers). Single-sources what was an inline assembly in `testing_spine_server.ts`, so the binary and the `spine_method_coverage` reconciliation test build the same list. Also `$lib`-free.
1751
1751
  - `testing/cross_backend/ts_spine_backend_config.ts` — `ts_spine_node_backend_config()` / `ts_spine_deno_backend_config()` / `ts_spine_bun_backend_config()` presets (in-memory PGlite, no external infra), the TS analog of `rust_spine_stub_backend_config()`.
@@ -2,16 +2,16 @@ import '../assert_dev_env.js';
2
2
  /**
3
3
  * Bun runtime adapter for spawnable cross-process test server binaries.
4
4
  *
5
- * Binds `Bun.serve` and `hono/bun`'s module-level `upgradeWebSocket` +
5
+ * Binds `Bun.serve` and `@hono/bun`'s module-level `upgradeWebSocket` +
6
6
  * `websocket` handler. The shared `testing/cross_backend/testing_server_core.ts` owns the rest.
7
7
  * Third sibling to `testing/cross_backend/testing_server_node.ts` / `testing/cross_backend/testing_server_deno.ts` —
8
8
  * together the three isolate the JS-runtime axis (Node V8 / Deno V8 / Bun
9
9
  * JSC) on identical TS surfaces, and the Rust spine binary covers the
10
10
  * cross-language axis.
11
11
  *
12
- * Needs **no extra deps**: `hono/bun` ships with the `hono` peer dep and
13
- * `Bun.serve` is built in (unlike Node, which pulls `@hono/node-server` +
14
- * `@hono/node-ws`). `RuntimeDeps` reuse `create_node_runtime` — Bun
12
+ * Needs the optional `@hono/bun` peer dep (the Bun counterpart to Node's
13
+ * `@hono/node-server` + `@hono/node-ws`); `Bun.serve` is built in.
14
+ * `RuntimeDeps` reuse `create_node_runtime` — Bun
15
15
  * implements the `node:fs` / `node:process` surface `RuntimeDeps` +
16
16
  * `cli/daemon` touch.
17
17
  *
@@ -22,7 +22,7 @@ import '../assert_dev_env.js';
22
22
  * @module
23
23
  */
24
24
  import process from 'node:process';
25
- import { getConnInfo, upgradeWebSocket, websocket } from 'hono/bun';
25
+ import { getConnInfo, upgradeWebSocket, websocket } from '@hono/bun';
26
26
  import { create_node_runtime } from '../../runtime/node.js';
27
27
  /** Build the Bun {@link TestingServerAdapter}. */
28
28
  export const create_bun_testing_adapter = () => ({
@@ -44,7 +44,7 @@ export const create_bun_testing_adapter = () => ({
44
44
  });
45
45
  const handle = {
46
46
  // Bun bug (1.3.14): after a *server-initiated* WebSocket close
47
- // (`ServerWebSocket.close()` / `hono/bun`'s `WSContext.close()`),
47
+ // (`ServerWebSocket.close()` / `@hono/bun`'s `WSContext.close()`),
48
48
  // `server.stop()` never resolves — Bun doesn't decrement its
49
49
  // active-connection count for a server-closed socket, so the stop
50
50
  // waits forever for a connection it already closed. The trigger is
@@ -11,7 +11,7 @@ import '../assert_dev_env.js';
11
11
  * primitives (HTTP serve, WS upgrade construction, signals, pid, exit) to a
12
12
  * {@link TestingServerAdapter}. The two shipped adapters are
13
13
  * `testing/cross_backend/testing_server_node.ts` (`@hono/node-server` + `@hono/node-ws`) and
14
- * `testing/cross_backend/testing_server_deno.ts` (`Deno.serve` + `hono/deno`).
14
+ * `testing/cross_backend/testing_server_deno.ts` (`Deno.serve` + `@hono/deno`).
15
15
  *
16
16
  * The app itself — routes, RPC, DB, `_testing_reset`, optional WS mount —
17
17
  * is the caller's {@link StartTestingServerOptions.build_app} seam, so this
@@ -1 +1 @@
1
- {"version":3,"file":"testing_server_deno.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/testing_server_deno.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAqB9B,OAAO,KAAK,EAAe,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAelF,mDAAmD;AACnD,eAAO,MAAM,2BAA2B,QAAO,oBAkB7C,CAAC"}
1
+ {"version":3,"file":"testing_server_deno.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/testing_server_deno.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAsB9B,OAAO,KAAK,EAAe,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAelF,mDAAmD;AACnD,eAAO,MAAM,2BAA2B,QAAO,oBAkB7C,CAAC"}
@@ -2,8 +2,9 @@ import '../assert_dev_env.js';
2
2
  /**
3
3
  * Deno runtime adapter for spawnable cross-process test server binaries.
4
4
  *
5
- * Binds `Deno.serve` and `hono/deno`'s module-level `upgradeWebSocket`. The
6
- * shared `testing/cross_backend/testing_server_core.ts` owns the rest. Counterpart to
5
+ * Binds `Deno.serve` and `@hono/deno`'s module-level `upgradeWebSocket` (the
6
+ * optional `@hono/deno` peer dep). The shared
7
+ * `testing/cross_backend/testing_server_core.ts` owns the rest. Counterpart to
7
8
  * `testing/cross_backend/testing_server_node.ts` — together they isolate the JS-runtime axis (Deno
8
9
  * vs Node V8) on identical TS surfaces, and the Rust spine binary covers the
9
10
  * cross-language axis.
@@ -14,7 +15,7 @@ import '../assert_dev_env.js';
14
15
  *
15
16
  * @module
16
17
  */
17
- import { upgradeWebSocket } from 'hono/deno';
18
+ import { upgradeWebSocket } from '@hono/deno';
18
19
  import { create_deno_runtime } from '../../runtime/deno.js';
19
20
  /** Build the Deno {@link TestingServerAdapter}. */
20
21
  export const create_deno_testing_adapter = () => ({
@@ -3,7 +3,7 @@ import '../assert_dev_env.js';
3
3
  * Node runtime adapter for spawnable cross-process test server binaries.
4
4
  *
5
5
  * Binds `@hono/node-server`'s `serve()` and `@hono/node-ws`'s two-phase
6
- * `createNodeWebSocket(app)` / `injectWebSocket(server)`. The shared
6
+ * `createNodeWebSocket({app})` / `injectWebSocket(server)`. The shared
7
7
  * `testing/cross_backend/testing_server_core.ts` owns the rest. A test binary builds this adapter
8
8
  * and hands it to `start_testing_server` alongside its `build_app` seam.
9
9
  *
@@ -57,7 +57,8 @@ export declare const ts_spine_node_backend_config: (options?: TsSpineBackendConf
57
57
  * `BackendConfig` for the Bun TS spine binary — spawned via `bun run`. Bun
58
58
  * resolves the entry's relative `.js`→`.ts` source specifiers natively (no
59
59
  * flag needed — unlike Deno's `--sloppy-imports`, and like Gro's loader on
60
- * the Node path), and `Bun.serve` + `hono/bun` need no extra deps.
60
+ * the Node path). `Bun.serve` is built in; the WS upgrade comes from the
61
+ * optional `@hono/bun` peer dep.
61
62
  */
62
63
  export declare const ts_spine_bun_backend_config: (options?: TsSpineBackendConfigOptions) => BackendConfig;
63
64
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ts_spine_backend_config.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/ts_spine_backend_config.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASzD,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AA0C3D,6FAA6F;AAC7F,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,iDAAiD;AACjD,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,gDAAgD;AAChD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,wDAAwD,CAAC;AAEzF,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,wDAAwD,CAAC;AAEzF,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,uDAAuD,CAAC;AAEvF,MAAM,WAAW,2BAA2B;IAC3C,mFAAmF;IACnF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAWD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACxC,UAAS,2BAAgC,KACvC,aAmBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GACvC,UAAS,2BAAgC,KACvC,aAmBF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,GACxC,UAAS,2BAAgC,KACvC,aAgCF,CAAC"}
1
+ {"version":3,"file":"ts_spine_backend_config.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/ts_spine_backend_config.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASzD,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AA0C3D,6FAA6F;AAC7F,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,iDAAiD;AACjD,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,gDAAgD;AAChD,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,wDAAwD,CAAC;AAEzF,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,wDAAwD,CAAC;AAEzF,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,uDAAuD,CAAC;AAEvF,MAAM,WAAW,2BAA2B;IAC3C,mFAAmF;IACnF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAWD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACxC,UAAS,2BAAgC,KACvC,aAmBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACvC,UAAS,2BAAgC,KACvC,aAmBF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,GACxC,UAAS,2BAAgC,KACvC,aAgCF,CAAC"}
@@ -89,7 +89,8 @@ export const ts_spine_node_backend_config = (options = {}) => {
89
89
  * `BackendConfig` for the Bun TS spine binary — spawned via `bun run`. Bun
90
90
  * resolves the entry's relative `.js`→`.ts` source specifiers natively (no
91
91
  * flag needed — unlike Deno's `--sloppy-imports`, and like Gro's loader on
92
- * the Node path), and `Bun.serve` + `hono/bun` need no extra deps.
92
+ * the Node path). `Bun.serve` is built in; the WS upgrade comes from the
93
+ * optional `@hono/bun` peer dep.
93
94
  */
94
95
  export const ts_spine_bun_backend_config = (options = {}) => {
95
96
  const { port = TS_SPINE_BUN_DEFAULT_PORT, database_url, enable_login_rate_limit } = options;
@@ -388,7 +388,9 @@
388
388
  --sidebar_offset: 0px;
389
389
  display: flex;
390
390
  flex-direction: column;
391
- min-height: 100vh;
391
+ /* the small viewport, so the floor alone never makes a mobile page
392
+ scroll with the toolbar shown, nor relayouts as the toolbar moves */
393
+ min-height: 100svh;
392
394
  }
393
395
  .app-shell.wide-open > .app-shell-content {
394
396
  --sidebar_offset: var(--sidebar_width);
package/dist/ui/CLAUDE.md CHANGED
@@ -221,19 +221,20 @@ pattern rather than reintroducing prop-drilling.
221
221
  to keep narrow mode at `0px`. To change only the wide open offset, target
222
222
  `.app-shell.wide-open > .app-shell-content`, also inside that negation.
223
223
  - `ColumnLayout.svelte` — fixed `aside` column + fluid `children`
224
- column; `column_width = '280px'`, `aside_label = 'menu'`. Below 64rem of
224
+ column; `column_width = '280px'`, `toggle_label = 'menu'`. Below 64rem of
225
225
  its own width (an `inline-size` container query named `column_layout`;
226
226
  64rem under fuz_css's 62.5% root is fuz_css's `sm` breakpoint, 640px at
227
227
  the default font size) the columns stack and the aside collapses behind a
228
228
  sticky `type="button"` toggle (`menuitem plain` with a `chevron`, text
229
- `aside_label`, `aria-expanded`/`aria-controls`); opened, the aside sits in flow above the content (scrolled into view under the toggle when scroll anchoring would leave it above the view), and `afterNavigate` closes it. With a bounded height, the stacked layout
229
+ `toggle_label`, `aria-expanded`/`aria-controls`); opened, the aside sits in flow above the content (scrolled into view under the toggle when scroll anchoring would leave it above the view), and `afterNavigate` closes it. With a bounded height, the stacked layout
230
230
  scrolls as one column and the toggle sticks to its top; under a parent
231
231
  that grows with its content, the page scrolls and the toggle scrolls away
232
232
  with it. Above the threshold the toggle is `display: none`. The switch is
233
233
  CSS alone, so the server render shows the right form at any width and
234
234
  hydration changes nothing. The
235
- `<aside>` takes `aria-label={aside_label}`; consumers wrap links in their
236
- own `<nav>`. Hooks: `--column_width`, `--column_toggle_bg` (default
235
+ aside column is a plain `<div>` (the toggle's `aria-controls` target), not
236
+ a landmark, as with `AppShell`'s sidebar; consumers render the landmark
237
+ inside the snippet - a `<nav aria-label>` for links, or an `<aside aria-label>` for other content. Hooks: `--column_width`, `--column_toggle_bg` (default
237
238
  `--shade_00`). The container can't size from its content, so a
238
239
  shrink-to-fit placement collapses it to zero width.
239
240
  - `MenuLink.svelte` — SvelteKit `<a>` with `selected` derived from
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Below a threshold of the layout's own width - a container query, not a
7
7
  * media query, so a nested layout decides for itself - the columns stack:
8
- * the aside collapses behind a toggle button labelled `aside_label`, and
8
+ * the aside collapses behind a toggle button labelled `toggle_label`, and
9
9
  * when opened it sits in flow above the content, pushing it down, until
10
10
  * the toggle closes it or a navigation does. Opening scrolls the aside
11
11
  * into view, under the toggle, when it would land above the view.
@@ -28,8 +28,10 @@
28
28
  * `afterNavigate`. Without JS the stacked aside can't be opened, since the
29
29
  * toggle is client state; above the threshold it's always shown.
30
30
  *
31
- * Renders a generic `<aside>` named by `aside_label`; wrap navigation
32
- * links in a `<nav>` inside the `aside` snippet.
31
+ * The aside column is a plain `<div>`, not a landmark, as with `AppShell`'s
32
+ * sidebar: render the landmark inside the `aside` snippet - a
33
+ * `<nav aria-label>` for navigation links, or an `<aside aria-label>` for
34
+ * other content.
33
35
  *
34
36
  * Styling hooks: `--column_width` (set from `column_width`) and
35
37
  * `--column_toggle_bg`, the stacked toggle bar's opaque background so
@@ -46,7 +48,7 @@
46
48
  aside,
47
49
  children,
48
50
  column_width = '280px',
49
- aside_label = 'menu',
51
+ toggle_label = 'menu',
50
52
  class: class_name = '',
51
53
  ...rest
52
54
  }: SvelteHTMLElements['div'] & {
@@ -58,10 +60,10 @@
58
60
  */
59
61
  column_width?: string;
60
62
  /**
61
- * The stacked toggle's text and the aside's accessible name.
63
+ * The stacked toggle's text.
62
64
  * @default 'menu'
63
65
  */
64
- aside_label?: string;
66
+ toggle_label?: string;
65
67
  } = $props();
66
68
 
67
69
  const uid = $props.id();
@@ -70,7 +72,7 @@
70
72
  let aside_open = $state(false);
71
73
 
72
74
  let toggle_bar_el: HTMLDivElement;
73
- let aside_el: HTMLElement;
75
+ let aside_el: HTMLDivElement;
74
76
 
75
77
  const toggle_aside = async (): Promise<void> => {
76
78
  aside_open = !aside_open;
@@ -103,18 +105,13 @@
103
105
  aria-controls={aside_id}
104
106
  onclick={toggle_aside}
105
107
  >
106
- {aside_label}
108
+ {toggle_label}
107
109
  <span class="chevron" aria-hidden="true"></span>
108
110
  </button>
109
111
  </div>
110
- <aside
111
- id={aside_id}
112
- class="column-fixed unstyled"
113
- aria-label={aside_label}
114
- bind:this={aside_el}
115
- >
112
+ <div id={aside_id} class="column-fixed" bind:this={aside_el}>
116
113
  {@render aside()}
117
- </aside>
114
+ </div>
118
115
  <div class="column-fluid">
119
116
  {@render children()}
120
117
  </div>
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Below a threshold of the layout's own width - a container query, not a
6
6
  * media query, so a nested layout decides for itself - the columns stack:
7
- * the aside collapses behind a toggle button labelled `aside_label`, and
7
+ * the aside collapses behind a toggle button labelled `toggle_label`, and
8
8
  * when opened it sits in flow above the content, pushing it down, until
9
9
  * the toggle closes it or a navigation does. Opening scrolls the aside
10
10
  * into view, under the toggle, when it would land above the view.
@@ -27,8 +27,10 @@
27
27
  * `afterNavigate`. Without JS the stacked aside can't be opened, since the
28
28
  * toggle is client state; above the threshold it's always shown.
29
29
  *
30
- * Renders a generic `<aside>` named by `aside_label`; wrap navigation
31
- * links in a `<nav>` inside the `aside` snippet.
30
+ * The aside column is a plain `<div>`, not a landmark, as with `AppShell`'s
31
+ * sidebar: render the landmark inside the `aside` snippet - a
32
+ * `<nav aria-label>` for navigation links, or an `<aside aria-label>` for
33
+ * other content.
32
34
  *
33
35
  * Styling hooks: `--column_width` (set from `column_width`) and
34
36
  * `--column_toggle_bg`, the stacked toggle bar's opaque background so
@@ -47,10 +49,10 @@ type $$ComponentProps = SvelteHTMLElements['div'] & {
47
49
  */
48
50
  column_width?: string;
49
51
  /**
50
- * The stacked toggle's text and the aside's accessible name.
52
+ * The stacked toggle's text.
51
53
  * @default 'menu'
52
54
  */
53
- aside_label?: string;
55
+ toggle_label?: string;
54
56
  };
55
57
  declare const ColumnLayout: import("svelte").Component<$$ComponentProps, {}, "">;
56
58
  type ColumnLayout = ReturnType<typeof ColumnLayout>;
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnLayout.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/ColumnLayout.svelte"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCI;AACJ,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG;IACpD,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAmEH,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ColumnLayout.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/ColumnLayout.svelte"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCI;AACJ,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG;IACpD,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAmEH,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuzdev/fuz_app",
3
- "version": "0.123.0",
3
+ "version": "0.125.0",
4
4
  "description": "fullstack app library",
5
5
  "glyph": "🗝",
6
6
  "logo": "logo.svg",
@@ -35,6 +35,8 @@
35
35
  "@fuzdev/blake3-wasm": ">=0.2.0",
36
36
  "@fuzdev/fuz_css": ">=0.65.0",
37
37
  "@fuzdev/fuz_util": ">=0.70.0",
38
+ "@hono/bun": ">=1",
39
+ "@hono/deno": ">=1",
38
40
  "@hono/node-server": ">=1",
39
41
  "@hono/node-ws": ">=1",
40
42
  "@node-rs/argon2": ">=2",
@@ -53,6 +55,12 @@
53
55
  "@fuzdev/fuz_css": {
54
56
  "optional": true
55
57
  },
58
+ "@hono/bun": {
59
+ "optional": true
60
+ },
61
+ "@hono/deno": {
62
+ "optional": true
63
+ },
56
64
  "@hono/node-server": {
57
65
  "optional": true
58
66
  },
@@ -79,11 +87,13 @@
79
87
  "@electric-sql/pglite": "^0.4.5",
80
88
  "@fuzdev/blake3-wasm": "^0.2.0",
81
89
  "@fuzdev/fuz_code": "^0.50.0",
82
- "@fuzdev/fuz_css": "^0.65.0",
83
- "@fuzdev/fuz_ui": "^0.210.0",
90
+ "@fuzdev/fuz_css": "^0.65.2",
91
+ "@fuzdev/fuz_ui": "^0.210.2",
84
92
  "@fuzdev/fuz_util": "^0.71.0",
85
93
  "@fuzdev/gro": "^0.213.0",
86
94
  "@fuzdev/mdz": "^0.3.0",
95
+ "@hono/bun": "^1.0.1",
96
+ "@hono/deno": "^1.0.3",
87
97
  "@hono/node-server": "^1.19.14",
88
98
  "@hono/node-ws": "^1.3.1",
89
99
  "@node-rs/argon2": "^2.0.2",
@@ -100,13 +110,13 @@
100
110
  "eslint": "^9.39.4",
101
111
  "eslint-plugin-svelte": "^3.15.1",
102
112
  "esm-env": "^1.2.2",
103
- "hono": "^4.12.21",
113
+ "hono": "^4.13.9",
104
114
  "jsdom": "^28.1.0",
105
115
  "magic-string": "^0.30.21",
106
116
  "pg": "^8.20.0",
107
117
  "svelte": "^5.56.4",
108
118
  "svelte-check": "^4.7.1",
109
- "svelte-docinfo": "^0.7.0",
119
+ "svelte-docinfo": "^0.8.0",
110
120
  "svelte2tsx": "^0.7.52",
111
121
  "tslib": "^2.8.1",
112
122
  "typescript": "^5.9.3",