@hanzo/ui 8.2.1 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backends/gui/screen.cjs +24 -15
- package/dist/backends/gui/screen.d.ts +24 -15
- package/dist/backends/gui/screen.d.ts.map +1 -1
- package/dist/backends/gui/screen.js +24 -15
- package/dist/backends/gui/screen.js.map +1 -1
- package/dist/gallery.html +19 -40
- package/dist/styles/motion.css +18 -39
- package/dist/styles.css +18 -39
- package/package.json +1 -1
|
@@ -9,18 +9,20 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
9
9
|
* The shape is always the same: something pinned at the top, something pinned at
|
|
10
10
|
* the bottom, and a middle that takes whatever is left and scrolls. Chat writes
|
|
11
11
|
* it, the console writes it, every workbench pane writes it. Written by hand it
|
|
12
|
-
* is
|
|
12
|
+
* is `flex: 1` for the slack plus something that says what to do with the
|
|
13
|
+
* overflow, and the second half is the one that gets left out. Measured in this
|
|
14
|
+
* package: `Thread` rendered 976px of turns in a 332px box and drew every one of
|
|
15
|
+
* them across the composer, because a container with `overflow: visible` never
|
|
16
|
+
* scrolls no matter how full it gets.
|
|
13
17
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* composer. 37 files here set `flex={1}`; exactly one had ever written the
|
|
23
|
-
* second declaration, and only after that bug was found.
|
|
18
|
+
* The folklore names `minHeight: 0` as that second half — a flex item's
|
|
19
|
+
* automatic minimum is its content, so the item refuses to shrink and grows the
|
|
20
|
+
* shell instead. True in general, and already handled here: rnw's `View` base and
|
|
21
|
+
* gui's own stack base both set `min-height: 0`, measured on the rendered
|
|
22
|
+
* element. So on web it is the DECLARED OVERFLOW that contains a shell, and
|
|
23
|
+
* `scripts/contain.mjs` keeps one frame of each as a control to say so —
|
|
24
|
+
* overflow without `minH` contains, `minH` without overflow escapes by 310px.
|
|
25
|
+
* Do not go adding `minH={0}` to flex sites; it changes nothing here.
|
|
24
26
|
*
|
|
25
27
|
* So the rule stops being a rule. `Fill` IS the middle, with both halves and the
|
|
26
28
|
* clip built in, and a caller cannot forget a thing it does not have to write.
|
|
@@ -57,10 +59,17 @@ exports.Screen = Screen;
|
|
|
57
59
|
/**
|
|
58
60
|
* The middle. Takes the slack, and can give it back.
|
|
59
61
|
*
|
|
60
|
-
* `flexBasis: 0`
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
62
|
+
* `flexBasis: 0` is what makes "takes the slack" true in both directions: grow
|
|
63
|
+
* into a bigger shell, shrink inside a smaller one. Siblings need nothing — a bar
|
|
64
|
+
* keeps its natural height because it never asked for slack. `overflowY` is the
|
|
65
|
+
* half that actually contains the result, and `minH` restates a floor the bases
|
|
66
|
+
* already set, kept because it costs nothing and this is where a reader looks
|
|
67
|
+
* for it.
|
|
68
|
+
*
|
|
69
|
+
* On web `scroll` becomes `overflow-y: auto` on a styled stack. A `ScrollView`
|
|
70
|
+
* is the other way to get a scrolling middle and the two are not
|
|
71
|
+
* interchangeable off the web — nothing here measures native, so nothing here
|
|
72
|
+
* claims it.
|
|
64
73
|
*/
|
|
65
74
|
const Fill = ({ children, scroll = true, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('fill'), flex: 1, flexBasis: 0, minH: 0, width: "100%", overflowY: scroll ? 'auto' : 'hidden', ...props, children: children }));
|
|
66
75
|
exports.Fill = Fill;
|
|
@@ -4,18 +4,20 @@
|
|
|
4
4
|
* The shape is always the same: something pinned at the top, something pinned at
|
|
5
5
|
* the bottom, and a middle that takes whatever is left and scrolls. Chat writes
|
|
6
6
|
* it, the console writes it, every workbench pane writes it. Written by hand it
|
|
7
|
-
* is
|
|
7
|
+
* is `flex: 1` for the slack plus something that says what to do with the
|
|
8
|
+
* overflow, and the second half is the one that gets left out. Measured in this
|
|
9
|
+
* package: `Thread` rendered 976px of turns in a 332px box and drew every one of
|
|
10
|
+
* them across the composer, because a container with `overflow: visible` never
|
|
11
|
+
* scrolls no matter how full it gets.
|
|
8
12
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* composer. 37 files here set `flex={1}`; exactly one had ever written the
|
|
18
|
-
* second declaration, and only after that bug was found.
|
|
13
|
+
* The folklore names `minHeight: 0` as that second half — a flex item's
|
|
14
|
+
* automatic minimum is its content, so the item refuses to shrink and grows the
|
|
15
|
+
* shell instead. True in general, and already handled here: rnw's `View` base and
|
|
16
|
+
* gui's own stack base both set `min-height: 0`, measured on the rendered
|
|
17
|
+
* element. So on web it is the DECLARED OVERFLOW that contains a shell, and
|
|
18
|
+
* `scripts/contain.mjs` keeps one frame of each as a control to say so —
|
|
19
|
+
* overflow without `minH` contains, `minH` without overflow escapes by 310px.
|
|
20
|
+
* Do not go adding `minH={0}` to flex sites; it changes nothing here.
|
|
19
21
|
*
|
|
20
22
|
* So the rule stops being a rule. `Fill` IS the middle, with both halves and the
|
|
21
23
|
* clip built in, and a caller cannot forget a thing it does not have to write.
|
|
@@ -49,10 +51,17 @@ export interface FillProps extends YStackProps {
|
|
|
49
51
|
/**
|
|
50
52
|
* The middle. Takes the slack, and can give it back.
|
|
51
53
|
*
|
|
52
|
-
* `flexBasis: 0`
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
54
|
+
* `flexBasis: 0` is what makes "takes the slack" true in both directions: grow
|
|
55
|
+
* into a bigger shell, shrink inside a smaller one. Siblings need nothing — a bar
|
|
56
|
+
* keeps its natural height because it never asked for slack. `overflowY` is the
|
|
57
|
+
* half that actually contains the result, and `minH` restates a floor the bases
|
|
58
|
+
* already set, kept because it costs nothing and this is where a reader looks
|
|
59
|
+
* for it.
|
|
60
|
+
*
|
|
61
|
+
* On web `scroll` becomes `overflow-y: auto` on a styled stack. A `ScrollView`
|
|
62
|
+
* is the other way to get a scrolling middle and the two are not
|
|
63
|
+
* interchangeable off the web — nothing here measures native, so nothing here
|
|
64
|
+
* claims it.
|
|
56
65
|
*/
|
|
57
66
|
declare const Fill: ({ children, scroll, ...props }: FillProps) => import("react/jsx-runtime").JSX.Element;
|
|
58
67
|
export { Screen, Fill };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/screen.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/screen.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAGrD,MAAM,WAAW,WAAY,SAAQ,WAAW;CAAG;AAEnD;;;;GAIG;AACH,QAAA,MAAM,MAAM,GAAI,wBAAwB,WAAW,4CAkBlD,CAAA;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,IAAI,GAAI,gCAAuC,SAAS,4CAY7D,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -6,18 +6,20 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
6
6
|
* The shape is always the same: something pinned at the top, something pinned at
|
|
7
7
|
* the bottom, and a middle that takes whatever is left and scrolls. Chat writes
|
|
8
8
|
* it, the console writes it, every workbench pane writes it. Written by hand it
|
|
9
|
-
* is
|
|
9
|
+
* is `flex: 1` for the slack plus something that says what to do with the
|
|
10
|
+
* overflow, and the second half is the one that gets left out. Measured in this
|
|
11
|
+
* package: `Thread` rendered 976px of turns in a 332px box and drew every one of
|
|
12
|
+
* them across the composer, because a container with `overflow: visible` never
|
|
13
|
+
* scrolls no matter how full it gets.
|
|
10
14
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* composer. 37 files here set `flex={1}`; exactly one had ever written the
|
|
20
|
-
* second declaration, and only after that bug was found.
|
|
15
|
+
* The folklore names `minHeight: 0` as that second half — a flex item's
|
|
16
|
+
* automatic minimum is its content, so the item refuses to shrink and grows the
|
|
17
|
+
* shell instead. True in general, and already handled here: rnw's `View` base and
|
|
18
|
+
* gui's own stack base both set `min-height: 0`, measured on the rendered
|
|
19
|
+
* element. So on web it is the DECLARED OVERFLOW that contains a shell, and
|
|
20
|
+
* `scripts/contain.mjs` keeps one frame of each as a control to say so —
|
|
21
|
+
* overflow without `minH` contains, `minH` without overflow escapes by 310px.
|
|
22
|
+
* Do not go adding `minH={0}` to flex sites; it changes nothing here.
|
|
21
23
|
*
|
|
22
24
|
* So the rule stops being a rule. `Fill` IS the middle, with both halves and the
|
|
23
25
|
* clip built in, and a caller cannot forget a thing it does not have to write.
|
|
@@ -53,10 +55,17 @@ const Screen = ({ children, ...props }) => (_jsx(YStack, { ...slot('screen'),
|
|
|
53
55
|
/**
|
|
54
56
|
* The middle. Takes the slack, and can give it back.
|
|
55
57
|
*
|
|
56
|
-
* `flexBasis: 0`
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
58
|
+
* `flexBasis: 0` is what makes "takes the slack" true in both directions: grow
|
|
59
|
+
* into a bigger shell, shrink inside a smaller one. Siblings need nothing — a bar
|
|
60
|
+
* keeps its natural height because it never asked for slack. `overflowY` is the
|
|
61
|
+
* half that actually contains the result, and `minH` restates a floor the bases
|
|
62
|
+
* already set, kept because it costs nothing and this is where a reader looks
|
|
63
|
+
* for it.
|
|
64
|
+
*
|
|
65
|
+
* On web `scroll` becomes `overflow-y: auto` on a styled stack. A `ScrollView`
|
|
66
|
+
* is the other way to get a scrolling middle and the two are not
|
|
67
|
+
* interchangeable off the web — nothing here measures native, so nothing here
|
|
68
|
+
* claims it.
|
|
60
69
|
*/
|
|
61
70
|
const Fill = ({ children, scroll = true, ...props }) => (_jsx(YStack, { ...slot('fill'), flex: 1, flexBasis: 0, minH: 0, width: "100%", overflowY: scroll ? 'auto' : 'hidden', ...props, children: children }));
|
|
62
71
|
export { Screen, Fill };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../../../src/backends/gui/screen.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../../../src/backends/gui/screen.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,EAAE,MAAM,EAAoB,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAI7B;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAe,EAAE,EAAE,CAAC,CACtD,KAAC,MAAM,OACD,IAAI,CAAC,QAAQ,CAAC;IAClB,yEAAyE;IACzE,6EAA6E;IAC7E,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,8EAA8E;IAC9E,IAAI,EAAE,CAAC,EACP,SAAS,EAAC,MAAM,EAChB,IAAI,EAAE,CAAC,EACP,KAAK,EAAC,MAAM,EACZ,QAAQ,EAAC,QAAQ,KACb,KAAK,YAER,QAAQ,GACF,CACV,CAAA;AAOD;;;;;;;;;;;;;;GAcG;AACH,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,EAAa,EAAE,EAAE,CAAC,CACjE,KAAC,MAAM,OACD,IAAI,CAAC,MAAM,CAAC,EAChB,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,CAAC,EACZ,IAAI,EAAE,CAAC,EACP,KAAK,EAAC,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KACjC,KAAK,YAER,QAAQ,GACF,CACV,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA"}
|
package/dist/gallery.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.
|
|
1
|
+
<!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.3.0</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
|
|
2
2
|
:root { --hanzo-ui-styles: 1; }
|
|
3
3
|
/* Hanzo Design System — the entry point. Import THIS one file.
|
|
4
4
|
*
|
|
@@ -1898,48 +1898,41 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
1898
1898
|
}
|
|
1899
1899
|
}
|
|
1900
1900
|
|
|
1901
|
-
.hz-fade-up
|
|
1902
|
-
.fade-up {
|
|
1901
|
+
.hz-fade-up {
|
|
1903
1902
|
animation: hz-fade-up 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
1904
1903
|
will-change: transform, opacity;
|
|
1905
1904
|
}
|
|
1906
1905
|
|
|
1907
1906
|
@media (prefers-reduced-motion: reduce) {
|
|
1908
|
-
.hz-fade-up
|
|
1909
|
-
.fade-up {
|
|
1907
|
+
.hz-fade-up {
|
|
1910
1908
|
animation: none;
|
|
1911
1909
|
}
|
|
1912
1910
|
}
|
|
1913
1911
|
|
|
1914
1912
|
/* Shell chrome motion — sidebar collapse (width) and the Linear-style two-level
|
|
1915
1913
|
nav slide (transform); backdrop cross-fade behind a SlideOver / dialog. */
|
|
1916
|
-
.hz-collapse
|
|
1917
|
-
.collapse {
|
|
1914
|
+
.hz-collapse {
|
|
1918
1915
|
transition: width 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1919
1916
|
will-change: width;
|
|
1920
1917
|
}
|
|
1921
1918
|
|
|
1922
|
-
.hz-slide
|
|
1923
|
-
.slide {
|
|
1919
|
+
.hz-slide {
|
|
1924
1920
|
transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1925
1921
|
will-change: transform;
|
|
1926
1922
|
}
|
|
1927
1923
|
|
|
1928
|
-
.hz-fade
|
|
1929
|
-
.fade {
|
|
1924
|
+
.hz-fade {
|
|
1930
1925
|
transition: opacity 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1931
1926
|
will-change: opacity;
|
|
1932
1927
|
}
|
|
1933
1928
|
|
|
1934
1929
|
/* Drag-to-reorder — a pinned row while it is being dragged (pointer DnD). The
|
|
1935
1930
|
lifted row gets a subtle lift; siblings ease into place via `.hz-slide`. */
|
|
1936
|
-
.hz-drag
|
|
1937
|
-
.drag {
|
|
1931
|
+
.hz-drag {
|
|
1938
1932
|
touch-action: none;
|
|
1939
1933
|
transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1940
1934
|
}
|
|
1941
|
-
.hz-drag[data-dragging='true']
|
|
1942
|
-
.drag[data-dragging='true'] {
|
|
1935
|
+
.hz-drag[data-dragging='true'] {
|
|
1943
1936
|
transition: none;
|
|
1944
1937
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
|
|
1945
1938
|
opacity: 0.96;
|
|
@@ -1948,13 +1941,9 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
1948
1941
|
|
|
1949
1942
|
@media (prefers-reduced-motion: reduce) {
|
|
1950
1943
|
.hz-collapse,
|
|
1951
|
-
.collapse,
|
|
1952
1944
|
.hz-slide,
|
|
1953
|
-
.slide,
|
|
1954
1945
|
.hz-fade,
|
|
1955
|
-
.
|
|
1956
|
-
.hz-drag,
|
|
1957
|
-
.drag {
|
|
1946
|
+
.hz-drag {
|
|
1958
1947
|
transition: none;
|
|
1959
1948
|
}
|
|
1960
1949
|
}
|
|
@@ -1974,8 +1963,7 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
1974
1963
|
}
|
|
1975
1964
|
}
|
|
1976
1965
|
|
|
1977
|
-
.hz-skeleton
|
|
1978
|
-
.skeleton {
|
|
1966
|
+
.hz-skeleton {
|
|
1979
1967
|
background-color: var(--color3, rgba(128, 128, 128, 0.14));
|
|
1980
1968
|
background-image: linear-gradient(
|
|
1981
1969
|
90deg,
|
|
@@ -2013,18 +2001,15 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2013
2001
|
}
|
|
2014
2002
|
}
|
|
2015
2003
|
|
|
2016
|
-
.hz-row-in
|
|
2017
|
-
.row-in {
|
|
2004
|
+
.hz-row-in {
|
|
2018
2005
|
animation: hz-row-in 0.35s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
2019
2006
|
}
|
|
2020
2007
|
|
|
2021
2008
|
@media (prefers-reduced-motion: reduce) {
|
|
2022
|
-
.hz-skeleton
|
|
2023
|
-
.skeleton {
|
|
2009
|
+
.hz-skeleton {
|
|
2024
2010
|
animation: none;
|
|
2025
2011
|
}
|
|
2026
|
-
.hz-row-in
|
|
2027
|
-
.row-in {
|
|
2012
|
+
.hz-row-in {
|
|
2028
2013
|
animation: none;
|
|
2029
2014
|
}
|
|
2030
2015
|
}
|
|
@@ -2037,16 +2022,14 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2037
2022
|
correctly. The elevation/ring variables fall back to sane values, so a host
|
|
2038
2023
|
that defines its own `--hz-*` theme tokens (the console does) still wins. */
|
|
2039
2024
|
|
|
2040
|
-
.hz-tnum
|
|
2041
|
-
.tnum {
|
|
2025
|
+
.hz-tnum {
|
|
2042
2026
|
font-variant-numeric: tabular-nums;
|
|
2043
2027
|
font-feature-settings: 'tnum' 1;
|
|
2044
2028
|
}
|
|
2045
2029
|
|
|
2046
2030
|
/* Data/numeric face — Geist Mono + tabular figures for metric values, prices, IDs
|
|
2047
2031
|
and counts, so numbers read as precise, column-aligned data. */
|
|
2048
|
-
.hz-mono
|
|
2049
|
-
.mono {
|
|
2032
|
+
.hz-mono {
|
|
2050
2033
|
font-family: var(--font-mono, 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
|
|
2051
2034
|
font-variant-numeric: tabular-nums;
|
|
2052
2035
|
font-feature-settings: 'tnum' 1;
|
|
@@ -2066,8 +2049,7 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2066
2049
|
order — so paper lost its drop on dark exactly the way the rungs did. The
|
|
2067
2050
|
fallback stays because this sheet ships on its own: a host that imports
|
|
2068
2051
|
motion.css without glass.css has no ladder to read. */
|
|
2069
|
-
.hz-paper
|
|
2070
|
-
.paper {
|
|
2052
|
+
.hz-paper {
|
|
2071
2053
|
box-shadow: var(--shadow-inset-hairline, inset 0 0 0 1px rgb(255 255 255 / .10)),
|
|
2072
2054
|
var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
|
|
2073
2055
|
var(--glass-shadow-2, 0 10px 15px -3px rgb(0 0 0 / .55), 0 4px 6px -4px rgb(0 0 0 / .55));
|
|
@@ -2082,20 +2064,17 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2082
2064
|
}
|
|
2083
2065
|
}
|
|
2084
2066
|
|
|
2085
|
-
.hz-menu-in
|
|
2086
|
-
.menu-in {
|
|
2067
|
+
.hz-menu-in {
|
|
2087
2068
|
animation: hz-menu-in 140ms ease-out both;
|
|
2088
2069
|
will-change: opacity;
|
|
2089
2070
|
}
|
|
2090
2071
|
|
|
2091
|
-
.hz-row
|
|
2092
|
-
.row {
|
|
2072
|
+
.hz-row {
|
|
2093
2073
|
transition: background-color 140ms ease-out;
|
|
2094
2074
|
}
|
|
2095
2075
|
|
|
2096
2076
|
@media (prefers-reduced-motion: reduce) {
|
|
2097
|
-
.hz-menu-in
|
|
2098
|
-
.menu-in {
|
|
2077
|
+
.hz-menu-in {
|
|
2099
2078
|
animation: none;
|
|
2100
2079
|
}
|
|
2101
2080
|
}
|
package/dist/styles/motion.css
CHANGED
|
@@ -36,48 +36,41 @@
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
.hz-fade-up
|
|
40
|
-
.fade-up {
|
|
39
|
+
.hz-fade-up {
|
|
41
40
|
animation: hz-fade-up 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
42
41
|
will-change: transform, opacity;
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
@media (prefers-reduced-motion: reduce) {
|
|
46
|
-
.hz-fade-up
|
|
47
|
-
.fade-up {
|
|
45
|
+
.hz-fade-up {
|
|
48
46
|
animation: none;
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
/* Shell chrome motion — sidebar collapse (width) and the Linear-style two-level
|
|
53
51
|
nav slide (transform); backdrop cross-fade behind a SlideOver / dialog. */
|
|
54
|
-
.hz-collapse
|
|
55
|
-
.collapse {
|
|
52
|
+
.hz-collapse {
|
|
56
53
|
transition: width 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
57
54
|
will-change: width;
|
|
58
55
|
}
|
|
59
56
|
|
|
60
|
-
.hz-slide
|
|
61
|
-
.slide {
|
|
57
|
+
.hz-slide {
|
|
62
58
|
transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
63
59
|
will-change: transform;
|
|
64
60
|
}
|
|
65
61
|
|
|
66
|
-
.hz-fade
|
|
67
|
-
.fade {
|
|
62
|
+
.hz-fade {
|
|
68
63
|
transition: opacity 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
69
64
|
will-change: opacity;
|
|
70
65
|
}
|
|
71
66
|
|
|
72
67
|
/* Drag-to-reorder — a pinned row while it is being dragged (pointer DnD). The
|
|
73
68
|
lifted row gets a subtle lift; siblings ease into place via `.hz-slide`. */
|
|
74
|
-
.hz-drag
|
|
75
|
-
.drag {
|
|
69
|
+
.hz-drag {
|
|
76
70
|
touch-action: none;
|
|
77
71
|
transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
78
72
|
}
|
|
79
|
-
.hz-drag[data-dragging='true']
|
|
80
|
-
.drag[data-dragging='true'] {
|
|
73
|
+
.hz-drag[data-dragging='true'] {
|
|
81
74
|
transition: none;
|
|
82
75
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
|
|
83
76
|
opacity: 0.96;
|
|
@@ -86,13 +79,9 @@
|
|
|
86
79
|
|
|
87
80
|
@media (prefers-reduced-motion: reduce) {
|
|
88
81
|
.hz-collapse,
|
|
89
|
-
.collapse,
|
|
90
82
|
.hz-slide,
|
|
91
|
-
.slide,
|
|
92
83
|
.hz-fade,
|
|
93
|
-
.
|
|
94
|
-
.hz-drag,
|
|
95
|
-
.drag {
|
|
84
|
+
.hz-drag {
|
|
96
85
|
transition: none;
|
|
97
86
|
}
|
|
98
87
|
}
|
|
@@ -112,8 +101,7 @@
|
|
|
112
101
|
}
|
|
113
102
|
}
|
|
114
103
|
|
|
115
|
-
.hz-skeleton
|
|
116
|
-
.skeleton {
|
|
104
|
+
.hz-skeleton {
|
|
117
105
|
background-color: var(--color3, rgba(128, 128, 128, 0.14));
|
|
118
106
|
background-image: linear-gradient(
|
|
119
107
|
90deg,
|
|
@@ -151,18 +139,15 @@
|
|
|
151
139
|
}
|
|
152
140
|
}
|
|
153
141
|
|
|
154
|
-
.hz-row-in
|
|
155
|
-
.row-in {
|
|
142
|
+
.hz-row-in {
|
|
156
143
|
animation: hz-row-in 0.35s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
157
144
|
}
|
|
158
145
|
|
|
159
146
|
@media (prefers-reduced-motion: reduce) {
|
|
160
|
-
.hz-skeleton
|
|
161
|
-
.skeleton {
|
|
147
|
+
.hz-skeleton {
|
|
162
148
|
animation: none;
|
|
163
149
|
}
|
|
164
|
-
.hz-row-in
|
|
165
|
-
.row-in {
|
|
150
|
+
.hz-row-in {
|
|
166
151
|
animation: none;
|
|
167
152
|
}
|
|
168
153
|
}
|
|
@@ -175,16 +160,14 @@
|
|
|
175
160
|
correctly. The elevation/ring variables fall back to sane values, so a host
|
|
176
161
|
that defines its own `--hz-*` theme tokens (the console does) still wins. */
|
|
177
162
|
|
|
178
|
-
.hz-tnum
|
|
179
|
-
.tnum {
|
|
163
|
+
.hz-tnum {
|
|
180
164
|
font-variant-numeric: tabular-nums;
|
|
181
165
|
font-feature-settings: 'tnum' 1;
|
|
182
166
|
}
|
|
183
167
|
|
|
184
168
|
/* Data/numeric face — Geist Mono + tabular figures for metric values, prices, IDs
|
|
185
169
|
and counts, so numbers read as precise, column-aligned data. */
|
|
186
|
-
.hz-mono
|
|
187
|
-
.mono {
|
|
170
|
+
.hz-mono {
|
|
188
171
|
font-family: var(--font-mono, 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
|
|
189
172
|
font-variant-numeric: tabular-nums;
|
|
190
173
|
font-feature-settings: 'tnum' 1;
|
|
@@ -204,8 +187,7 @@
|
|
|
204
187
|
order — so paper lost its drop on dark exactly the way the rungs did. The
|
|
205
188
|
fallback stays because this sheet ships on its own: a host that imports
|
|
206
189
|
motion.css without glass.css has no ladder to read. */
|
|
207
|
-
.hz-paper
|
|
208
|
-
.paper {
|
|
190
|
+
.hz-paper {
|
|
209
191
|
box-shadow: var(--shadow-inset-hairline, inset 0 0 0 1px rgb(255 255 255 / .10)),
|
|
210
192
|
var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
|
|
211
193
|
var(--glass-shadow-2, 0 10px 15px -3px rgb(0 0 0 / .55), 0 4px 6px -4px rgb(0 0 0 / .55));
|
|
@@ -220,20 +202,17 @@
|
|
|
220
202
|
}
|
|
221
203
|
}
|
|
222
204
|
|
|
223
|
-
.hz-menu-in
|
|
224
|
-
.menu-in {
|
|
205
|
+
.hz-menu-in {
|
|
225
206
|
animation: hz-menu-in 140ms ease-out both;
|
|
226
207
|
will-change: opacity;
|
|
227
208
|
}
|
|
228
209
|
|
|
229
|
-
.hz-row
|
|
230
|
-
.row {
|
|
210
|
+
.hz-row {
|
|
231
211
|
transition: background-color 140ms ease-out;
|
|
232
212
|
}
|
|
233
213
|
|
|
234
214
|
@media (prefers-reduced-motion: reduce) {
|
|
235
|
-
.hz-menu-in
|
|
236
|
-
.menu-in {
|
|
215
|
+
.hz-menu-in {
|
|
237
216
|
animation: none;
|
|
238
217
|
}
|
|
239
218
|
}
|
package/dist/styles.css
CHANGED
|
@@ -1898,48 +1898,41 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
1898
1898
|
}
|
|
1899
1899
|
}
|
|
1900
1900
|
|
|
1901
|
-
.hz-fade-up
|
|
1902
|
-
.fade-up {
|
|
1901
|
+
.hz-fade-up {
|
|
1903
1902
|
animation: hz-fade-up 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
1904
1903
|
will-change: transform, opacity;
|
|
1905
1904
|
}
|
|
1906
1905
|
|
|
1907
1906
|
@media (prefers-reduced-motion: reduce) {
|
|
1908
|
-
.hz-fade-up
|
|
1909
|
-
.fade-up {
|
|
1907
|
+
.hz-fade-up {
|
|
1910
1908
|
animation: none;
|
|
1911
1909
|
}
|
|
1912
1910
|
}
|
|
1913
1911
|
|
|
1914
1912
|
/* Shell chrome motion — sidebar collapse (width) and the Linear-style two-level
|
|
1915
1913
|
nav slide (transform); backdrop cross-fade behind a SlideOver / dialog. */
|
|
1916
|
-
.hz-collapse
|
|
1917
|
-
.collapse {
|
|
1914
|
+
.hz-collapse {
|
|
1918
1915
|
transition: width 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1919
1916
|
will-change: width;
|
|
1920
1917
|
}
|
|
1921
1918
|
|
|
1922
|
-
.hz-slide
|
|
1923
|
-
.slide {
|
|
1919
|
+
.hz-slide {
|
|
1924
1920
|
transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1925
1921
|
will-change: transform;
|
|
1926
1922
|
}
|
|
1927
1923
|
|
|
1928
|
-
.hz-fade
|
|
1929
|
-
.fade {
|
|
1924
|
+
.hz-fade {
|
|
1930
1925
|
transition: opacity 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1931
1926
|
will-change: opacity;
|
|
1932
1927
|
}
|
|
1933
1928
|
|
|
1934
1929
|
/* Drag-to-reorder — a pinned row while it is being dragged (pointer DnD). The
|
|
1935
1930
|
lifted row gets a subtle lift; siblings ease into place via `.hz-slide`. */
|
|
1936
|
-
.hz-drag
|
|
1937
|
-
.drag {
|
|
1931
|
+
.hz-drag {
|
|
1938
1932
|
touch-action: none;
|
|
1939
1933
|
transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
1940
1934
|
}
|
|
1941
|
-
.hz-drag[data-dragging='true']
|
|
1942
|
-
.drag[data-dragging='true'] {
|
|
1935
|
+
.hz-drag[data-dragging='true'] {
|
|
1943
1936
|
transition: none;
|
|
1944
1937
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
|
|
1945
1938
|
opacity: 0.96;
|
|
@@ -1948,13 +1941,9 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
1948
1941
|
|
|
1949
1942
|
@media (prefers-reduced-motion: reduce) {
|
|
1950
1943
|
.hz-collapse,
|
|
1951
|
-
.collapse,
|
|
1952
1944
|
.hz-slide,
|
|
1953
|
-
.slide,
|
|
1954
1945
|
.hz-fade,
|
|
1955
|
-
.
|
|
1956
|
-
.hz-drag,
|
|
1957
|
-
.drag {
|
|
1946
|
+
.hz-drag {
|
|
1958
1947
|
transition: none;
|
|
1959
1948
|
}
|
|
1960
1949
|
}
|
|
@@ -1974,8 +1963,7 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
1974
1963
|
}
|
|
1975
1964
|
}
|
|
1976
1965
|
|
|
1977
|
-
.hz-skeleton
|
|
1978
|
-
.skeleton {
|
|
1966
|
+
.hz-skeleton {
|
|
1979
1967
|
background-color: var(--color3, rgba(128, 128, 128, 0.14));
|
|
1980
1968
|
background-image: linear-gradient(
|
|
1981
1969
|
90deg,
|
|
@@ -2013,18 +2001,15 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2013
2001
|
}
|
|
2014
2002
|
}
|
|
2015
2003
|
|
|
2016
|
-
.hz-row-in
|
|
2017
|
-
.row-in {
|
|
2004
|
+
.hz-row-in {
|
|
2018
2005
|
animation: hz-row-in 0.35s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
2019
2006
|
}
|
|
2020
2007
|
|
|
2021
2008
|
@media (prefers-reduced-motion: reduce) {
|
|
2022
|
-
.hz-skeleton
|
|
2023
|
-
.skeleton {
|
|
2009
|
+
.hz-skeleton {
|
|
2024
2010
|
animation: none;
|
|
2025
2011
|
}
|
|
2026
|
-
.hz-row-in
|
|
2027
|
-
.row-in {
|
|
2012
|
+
.hz-row-in {
|
|
2028
2013
|
animation: none;
|
|
2029
2014
|
}
|
|
2030
2015
|
}
|
|
@@ -2037,16 +2022,14 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2037
2022
|
correctly. The elevation/ring variables fall back to sane values, so a host
|
|
2038
2023
|
that defines its own `--hz-*` theme tokens (the console does) still wins. */
|
|
2039
2024
|
|
|
2040
|
-
.hz-tnum
|
|
2041
|
-
.tnum {
|
|
2025
|
+
.hz-tnum {
|
|
2042
2026
|
font-variant-numeric: tabular-nums;
|
|
2043
2027
|
font-feature-settings: 'tnum' 1;
|
|
2044
2028
|
}
|
|
2045
2029
|
|
|
2046
2030
|
/* Data/numeric face — Geist Mono + tabular figures for metric values, prices, IDs
|
|
2047
2031
|
and counts, so numbers read as precise, column-aligned data. */
|
|
2048
|
-
.hz-mono
|
|
2049
|
-
.mono {
|
|
2032
|
+
.hz-mono {
|
|
2050
2033
|
font-family: var(--font-mono, 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
|
|
2051
2034
|
font-variant-numeric: tabular-nums;
|
|
2052
2035
|
font-feature-settings: 'tnum' 1;
|
|
@@ -2066,8 +2049,7 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2066
2049
|
order — so paper lost its drop on dark exactly the way the rungs did. The
|
|
2067
2050
|
fallback stays because this sheet ships on its own: a host that imports
|
|
2068
2051
|
motion.css without glass.css has no ladder to read. */
|
|
2069
|
-
.hz-paper
|
|
2070
|
-
.paper {
|
|
2052
|
+
.hz-paper {
|
|
2071
2053
|
box-shadow: var(--shadow-inset-hairline, inset 0 0 0 1px rgb(255 255 255 / .10)),
|
|
2072
2054
|
var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
|
|
2073
2055
|
var(--glass-shadow-2, 0 10px 15px -3px rgb(0 0 0 / .55), 0 4px 6px -4px rgb(0 0 0 / .55));
|
|
@@ -2082,20 +2064,17 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
2082
2064
|
}
|
|
2083
2065
|
}
|
|
2084
2066
|
|
|
2085
|
-
.hz-menu-in
|
|
2086
|
-
.menu-in {
|
|
2067
|
+
.hz-menu-in {
|
|
2087
2068
|
animation: hz-menu-in 140ms ease-out both;
|
|
2088
2069
|
will-change: opacity;
|
|
2089
2070
|
}
|
|
2090
2071
|
|
|
2091
|
-
.hz-row
|
|
2092
|
-
.row {
|
|
2072
|
+
.hz-row {
|
|
2093
2073
|
transition: background-color 140ms ease-out;
|
|
2094
2074
|
}
|
|
2095
2075
|
|
|
2096
2076
|
@media (prefers-reduced-motion: reduce) {
|
|
2097
|
-
.hz-menu-in
|
|
2098
|
-
.menu-in {
|
|
2077
|
+
.hz-menu-in {
|
|
2099
2078
|
animation: none;
|
|
2100
2079
|
}
|
|
2101
2080
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzo/ui",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Hanzo UI — the one canonical Hanzo component library, on @hanzo/gui + @hanzo/design. ONE substrate: every component renders through @hanzo/gui primitives, so the same import works on web, native (expo) and desktop (Tauri). Self-contained (theme.css), presentational, host-agnostic, clean-room.",
|
|
6
6
|
"exports": {
|