@fuzdev/fuz_app 0.123.0 → 0.124.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)).
|
package/dist/ui/AppShell.svelte
CHANGED
|
@@ -388,7 +388,9 @@
|
|
|
388
388
|
--sidebar_offset: 0px;
|
|
389
389
|
display: flex;
|
|
390
390
|
flex-direction: column;
|
|
391
|
-
|
|
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'`, `
|
|
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
|
-
`
|
|
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
|
-
`<
|
|
236
|
-
|
|
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 `
|
|
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
|
-
*
|
|
32
|
-
*
|
|
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
|
-
|
|
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
|
|
63
|
+
* The stacked toggle's text.
|
|
62
64
|
* @default 'menu'
|
|
63
65
|
*/
|
|
64
|
-
|
|
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:
|
|
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
|
-
{
|
|
108
|
+
{toggle_label}
|
|
107
109
|
<span class="chevron" aria-hidden="true"></span>
|
|
108
110
|
</button>
|
|
109
111
|
</div>
|
|
110
|
-
<
|
|
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
|
-
</
|
|
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 `
|
|
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
|
-
*
|
|
31
|
-
*
|
|
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
|
|
52
|
+
* The stacked toggle's text.
|
|
51
53
|
* @default 'menu'
|
|
52
54
|
*/
|
|
53
|
-
|
|
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
|
|
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.
|
|
3
|
+
"version": "0.124.0",
|
|
4
4
|
"description": "fullstack app library",
|
|
5
5
|
"glyph": "🗝",
|
|
6
6
|
"logo": "logo.svg",
|
|
@@ -79,8 +79,8 @@
|
|
|
79
79
|
"@electric-sql/pglite": "^0.4.5",
|
|
80
80
|
"@fuzdev/blake3-wasm": "^0.2.0",
|
|
81
81
|
"@fuzdev/fuz_code": "^0.50.0",
|
|
82
|
-
"@fuzdev/fuz_css": "^0.65.
|
|
83
|
-
"@fuzdev/fuz_ui": "^0.210.
|
|
82
|
+
"@fuzdev/fuz_css": "^0.65.1",
|
|
83
|
+
"@fuzdev/fuz_ui": "^0.210.1",
|
|
84
84
|
"@fuzdev/fuz_util": "^0.71.0",
|
|
85
85
|
"@fuzdev/gro": "^0.213.0",
|
|
86
86
|
"@fuzdev/mdz": "^0.3.0",
|