@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.
@@ -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 two declarations, and BOTH have to be right or the failure is silent:
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
- * `flex: 1` alone gives the middle the slack…
15
- * `minHeight: 0` is what lets it actually shrink to take it.
16
- *
17
- * Without the second, a flex item's automatic minimum is its CONTENT, so the
18
- * middle refuses to go below its natural height, grows the shell instead, and —
19
- * because a scroll container that never overflows never scrolls — paints its
20
- * content straight over whatever follows. Measured in this package: `Thread`
21
- * rendered 976px of turns in a 332px box and drew every one of them across the
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` with `minHeight: 0` is the pair that makes "takes the slack"
61
- * true in both directions: grow into a bigger shell, shrink inside a smaller
62
- * one. Siblings need nothing — a bar keeps its natural height because it never
63
- * asked for slack.
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 two declarations, and BOTH have to be right or the failure is silent:
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
- * `flex: 1` alone gives the middle the slack…
10
- * `minHeight: 0` is what lets it actually shrink to take it.
11
- *
12
- * Without the second, a flex item's automatic minimum is its CONTENT, so the
13
- * middle refuses to go below its natural height, grows the shell instead, and —
14
- * because a scroll container that never overflows never scrolls — paints its
15
- * content straight over whatever follows. Measured in this package: `Thread`
16
- * rendered 976px of turns in a 332px box and drew every one of them across the
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` with `minHeight: 0` is the pair that makes "takes the slack"
53
- * true in both directions: grow into a bigger shell, shrink inside a smaller
54
- * one. Siblings need nothing — a bar keeps its natural height because it never
55
- * asked for slack.
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;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;;;;;;;GAOG;AACH,QAAA,MAAM,IAAI,GAAI,gCAAuC,SAAS,4CAY7D,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA"}
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 two declarations, and BOTH have to be right or the failure is silent:
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
- * `flex: 1` alone gives the middle the slack…
12
- * `minHeight: 0` is what lets it actually shrink to take it.
13
- *
14
- * Without the second, a flex item's automatic minimum is its CONTENT, so the
15
- * middle refuses to go below its natural height, grows the shell instead, and —
16
- * because a scroll container that never overflows never scrolls — paints its
17
- * content straight over whatever follows. Measured in this package: `Thread`
18
- * rendered 976px of turns in a 332px box and drew every one of them across the
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` with `minHeight: 0` is the pair that makes "takes the slack"
57
- * true in both directions: grow into a bigger shell, shrink inside a smaller
58
- * one. Siblings need nothing — a bar keeps its natural height because it never
59
- * asked for slack.
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;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;;;;;;;GAOG;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"}
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.2.1</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
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
- .fade,
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
  }
@@ -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
- .fade,
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
- .fade,
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.2.1",
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": {