@hanzo/ui 8.27.22 → 8.27.23

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../src/masthead/nav.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,+EAA+E;AAE/E,oDAAoD;AACpD,MAAM,CAAC,MAAM,OAAO,GAAG,2BAA2B,CAAA;AAClD,oEAAoE;AACpE,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,OAAO,WAAW,CAAA;AACzC,yFAAyF;AACzF,MAAM,CAAC,MAAM,GAAG,GAAG,mBAAmB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAA;AAC/C,MAAM,CAAC,MAAM,MAAM,GAAG,4BAA4B,CAAA;AAClD,MAAM,CAAC,MAAM,IAAI,GAAG,uBAAuB,CAAA;AAC3C,MAAM,CAAC,MAAM,MAAM,GAAG,sBAAsB,CAAA;AAC5C,MAAM,CAAC,MAAM,IAAI,GAAG,uBAAuB,CAAA;AAC3C,MAAM,CAAC,MAAM,MAAM,GAAG,8BAA8B,CAAA;AACpD,iCAAiC;AACjC,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAA;AAEtD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAA;AAC9B,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAA;AAC/B,2BAA2B;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAA;AA2BrC,oFAAoF;AACpF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAExE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAA;AAEzH,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,MAAM;IACb,MAAM,EAAE;QACN;YACE,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE;gBACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;gBACjC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;gBACtC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACjC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;aACzC;SACF;QACD;YACE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE;gBACL,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC7C,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE;gBAC5C,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;gBAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;aACvC;SACF;KACF;CACF,CAAA;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;oBAC7C,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;oBAClC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;oBAChC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;iBACxC;aACF;YACD;gBACE,KAAK,EAAE,kBAAkB;gBACzB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;oBACxC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE;oBAC5C,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE;oBAC9C,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE;iBACxC;aACF;YACD;gBACE,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;oBACxC,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAClD;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE;oBACrC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;iBAC/B;aACF;YACD;gBACE,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;oBACxC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC9B,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;oBACtC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;oBACxC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;iBACvC;aACF;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;oBACjC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;oBACtC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;oBACpC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;iBACrC;aACF;YACD;gBACE,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC9B,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE;oBAC1C,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE;oBAClD,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;oBAC9B,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;oBAC7C,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,EAAE;iBAC3D;aACF;YACD,iFAAiF;YACjF;gBACE,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE;oBAC5C,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE;oBAC/C,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;oBAC7C,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;oBAC7C,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;oBAC7C,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;oBACjD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;oBACjD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;iBAC9C;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC3C,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE;oBAC5C,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EAAE;oBACjD,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;oBACtC,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE;iBACnD;aACF;YACD;gBACE,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,SAAS,UAAU,EAAE;oBAClD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,OAAO,EAAE;oBAC5C,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,QAAQ,EAAE;oBAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,SAAS,YAAY,EAAE;oBACtD,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,SAAS,aAAa,EAAE;oBACxD,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,SAAS,cAAc,EAAE;oBAC1D,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,SAAS,EAAE;iBACjD;aACF;YACD;gBACE,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,SAAS,gBAAgB,EAAE;oBAC9D,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,SAAS,qBAAqB,EAAE;oBACxE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,SAAS,aAAa,EAAE;oBACxD,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,MAAM,EAAE;oBAC1C,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,SAAS,EAAE;oBAChD,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,SAAS,aAAa,EAAE;oBACxD,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,SAAS,YAAY,EAAE;iBACvD;aACF;YACD;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,SAAS,mBAAmB,EAAE;oBACpE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,SAAS,WAAW,EAAE;oBACpD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,SAAS,EAAE;iBACjD;aACF;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,SAAS,WAAW,EAAE;oBACzD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;oBACxC,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;oBAChD,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE;iBAClD;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,MAAM;QACb,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE;oBACtC,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAAE;oBACzD,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI,mBAAmB,EAAE;oBACzD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;oBAChC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE;iBACvC;aACF;YACD;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;oBACjC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;oBAC1C,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE;oBAChD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;iBACxC;aACF;YACD;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;oBACjC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;oBACnC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;iBAClC;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACrC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,eAAe,EAAE;oBACjD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,wBAAwB,EAAE;oBAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;iBACjC;aACF;YACD;gBACE,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE;oBACL,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE;oBAChD,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE;iBAC3C;aACF;SACF;KACF;CACF,CAAA;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAClE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE;CAC1E,CAAA;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,GAAG,GAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAE7D,gFAAgF;AAChF,MAAM,CAAC,MAAM,IAAI,GAAS,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AAE5D,uCAAuC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA"}
@@ -0,0 +1,502 @@
1
+ /* hanzo.ai's header (Masthead, @hanzo/ui/masthead): the bar, a menu's plane,
2
+ Log in ▾, and the phone sheet. Imported once by every site that wears it.
3
+
4
+ The bar reads the theme's tokens (@hanzo/design via @hanzo/ui/theme.css), so
5
+ light and dark need no second copy of any of it. The three below are the
6
+ chrome's own; a site that states them at :root wins, since these sit at zero
7
+ specificity. */
8
+ :where(:root) {
9
+ /* The header's height. */
10
+ --header: 60px;
11
+ /* One inset for the chrome and the page under it, the shell's GUTTER. */
12
+ --page-gutter: clamp(20px, 4vw, 72px);
13
+ /* The ground every chrome menu stands on: @hanzo/design's dropdown panel,
14
+ opaque, a shade above --background in either theme. */
15
+ --chrome-panel: var(--popover);
16
+ }
17
+ /* The bar's ink on a light page. The shell writes its inks as
18
+ `var(--white-92, …)` with white only as the fallback, so stating these names
19
+ on the bar turns every inline use black at once. Scoped to the bar: the names
20
+ mean a hue, and a page's own glows and hover fills stay white.
21
+
22
+ --white-45 is pushed to .56 rather than mirrored: black on white reads fainter
23
+ than white on black at the same alpha, and .56 is 4.5:1 on both the bar and
24
+ the panel. The panel under these inks is --chrome-panel, which flips with the
25
+ theme at `.light` wherever a menu is mounted. */
26
+ .light .hz-masthead {
27
+ --white-92: rgb(0 0 0 / 0.92);
28
+ --white-60: rgb(0 0 0 / 0.6);
29
+ --white-45: rgb(0 0 0 / 0.56);
30
+ --white-10: rgb(0 0 0 / 0.1);
31
+ }
32
+
33
+ /* ==========================================================================
34
+ THE BAR AND THE SHEET
35
+
36
+ One nav tree, two drawings: the bar and the phone sheet. The bar's geometry
37
+ is @hanzogui/shell's — a 60px row, 34px pills, 13px labels, a 16px mark
38
+ before each, a 12px chevron after — so it reads as the same chrome the rest
39
+ of the estate wears. Every ink and ground is a theme token.
40
+
41
+ THREE GROUNDS for the bar. Clear over the top of a page; glass once the page
42
+ moves under it; and the plane's own opaque ground while a menu or the sheet
43
+ hangs from it, so bar and plane are one surface. The open bar carries no
44
+ backdrop filter on purpose: a filtered element is a backdrop root, and the
45
+ veil inside it would then blur the bar instead of the page.
46
+ ========================================================================== */
47
+
48
+ .hz-masthead {
49
+ --wash: color-mix(in srgb, var(--foreground) 6%, transparent);
50
+ --hairline: color-mix(in srgb, var(--foreground) 10%, transparent);
51
+ position: sticky;
52
+ top: 0;
53
+ z-index: var(--z-header);
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 12px;
57
+ box-sizing: content-box;
58
+ height: var(--header);
59
+ padding: env(safe-area-inset-top) var(--page-gutter) 0;
60
+ font-family: var(--font-sans);
61
+ /* The type the chrome is set in: @hanzo/gui's body, 16px on a 20px line. A
62
+ fixed line, so every row keeps its height whatever the host's body type. */
63
+ font-size: 16px;
64
+ line-height: 20px;
65
+ color: var(--foreground);
66
+ transition: background-color 160ms ease;
67
+ }
68
+
69
+ .hz-masthead[data-grounded] {
70
+ background: color-mix(in srgb, var(--background) 72%, transparent);
71
+ backdrop-filter: blur(20px) saturate(1.8);
72
+ -webkit-backdrop-filter: blur(20px) saturate(1.8);
73
+ }
74
+
75
+ .hz-masthead:has([aria-expanded='true']) {
76
+ background: var(--chrome-panel);
77
+ backdrop-filter: none;
78
+ -webkit-backdrop-filter: none;
79
+ }
80
+
81
+ .hz-masthead a,
82
+ .hz-masthead button {
83
+ font-family: inherit;
84
+ text-decoration: none;
85
+ }
86
+
87
+ /* ------------------------------------------------------------------ pills */
88
+
89
+ .hz-masthead .hz-trigger,
90
+ .hz-masthead .hz-find,
91
+ .hz-masthead .hz-brand {
92
+ display: inline-flex;
93
+ align-items: center;
94
+ flex-shrink: 0;
95
+ box-sizing: border-box;
96
+ height: 34px;
97
+ border: 0;
98
+ border-radius: 999px;
99
+ background: transparent;
100
+ color: var(--muted-foreground);
101
+ cursor: pointer;
102
+ transition: color 120ms ease, background-color 120ms ease, box-shadow 120ms ease;
103
+ }
104
+
105
+ .hz-masthead .hz-trigger {
106
+ gap: 6px;
107
+ padding: 0 12px;
108
+ font-size: var(--text-sm);
109
+ font-weight: var(--weight-medium);
110
+ white-space: nowrap;
111
+ }
112
+
113
+ .hz-masthead .hz-trigger:hover,
114
+ .hz-masthead .hz-trigger[aria-expanded='true'],
115
+ .hz-masthead .hz-find:hover,
116
+ .hz-masthead .hz-brand:hover,
117
+ .hz-masthead .hz-brand:has([aria-expanded='true']) {
118
+ color: var(--foreground);
119
+ background: var(--wash);
120
+ box-shadow: inset 0 0 0 1px var(--hairline);
121
+ }
122
+
123
+ :is(.hz-masthead, .hz-sheet) .hz-mark {
124
+ display: inline-flex;
125
+ opacity: 0.9;
126
+ }
127
+
128
+ :is(.hz-masthead, .hz-sheet) .hz-chevron {
129
+ flex-shrink: 0;
130
+ transition: transform 150ms ease;
131
+ }
132
+
133
+ [aria-expanded='true'] > .hz-chevron,
134
+ details[open] > summary > .hz-chevron {
135
+ transform: rotate(180deg);
136
+ }
137
+
138
+ /* The name of the place is never dim, and the chevron beside it is its own stop:
139
+ the name goes home, the chevron opens the company. */
140
+ .hz-masthead .hz-brand {
141
+ margin-left: -4px;
142
+ color: var(--foreground);
143
+ }
144
+
145
+ .hz-masthead .hz-brand .hz-wordmark {
146
+ display: inline-flex;
147
+ align-items: center;
148
+ height: 100%;
149
+ padding-left: 12px;
150
+ color: inherit;
151
+ }
152
+
153
+ .hz-masthead .hz-brand .hz-company {
154
+ display: inline-grid;
155
+ place-items: center;
156
+ width: 30px;
157
+ height: 100%;
158
+ padding: 0 6px 0 0;
159
+ border: 0;
160
+ border-radius: 0 999px 999px 0;
161
+ background: transparent;
162
+ color: inherit;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .hz-masthead .hz-nav {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 2px;
170
+ }
171
+
172
+ .hz-masthead .hz-find {
173
+ justify-content: center;
174
+ width: 34px;
175
+ }
176
+
177
+ .hz-masthead .hz-end {
178
+ display: flex;
179
+ align-items: center;
180
+ gap: 8px;
181
+ margin-left: auto;
182
+ }
183
+
184
+ .hz-masthead .hz-menu {
185
+ position: relative;
186
+ display: inline-flex;
187
+ }
188
+
189
+ /* The one filled control in the bar. */
190
+ :is(.hz-masthead, .hz-sheet) .hz-try {
191
+ display: inline-flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ gap: 2px;
195
+ box-sizing: border-box;
196
+ height: 34px;
197
+ padding: 0 14px;
198
+ border-radius: 999px;
199
+ background: var(--foreground);
200
+ color: var(--background);
201
+ font-size: var(--text-sm);
202
+ font-weight: var(--weight-semibold);
203
+ white-space: nowrap;
204
+ text-decoration: none;
205
+ transition: opacity 120ms ease;
206
+ }
207
+
208
+ :is(.hz-masthead, .hz-sheet) .hz-try:hover {
209
+ opacity: 0.88;
210
+ }
211
+
212
+ :is(.hz-masthead, .hz-sheet) .hz-out {
213
+ display: inline-block;
214
+ margin-left: 0.28em;
215
+ vertical-align: middle;
216
+ opacity: 0.7;
217
+ }
218
+
219
+ .hz-masthead .hz-toggle {
220
+ display: none;
221
+ place-items: center;
222
+ width: 44px;
223
+ height: 44px;
224
+ margin-right: -10px;
225
+ border: 0;
226
+ background: transparent;
227
+ color: var(--foreground);
228
+ cursor: pointer;
229
+ }
230
+
231
+ /* ------------------------------------------------------------------ plane */
232
+
233
+ /* A menu's panel spans the window under the bar and lays its columns out from
234
+ the wordmark's column. */
235
+ .hz-masthead .hz-plane {
236
+ position: fixed;
237
+ top: calc(var(--header) + env(safe-area-inset-top));
238
+ left: 0;
239
+ right: 0;
240
+ z-index: calc(var(--z-base) + 1);
241
+ max-height: calc(100dvh - var(--header));
242
+ overflow-y: auto;
243
+ background: var(--chrome-panel);
244
+ box-shadow: 0 24px 60px -16px color-mix(in srgb, var(--pure-black) 75%, transparent);
245
+ animation: hz-plane-in 160ms cubic-bezier(0.2, 0.9, 0.3, 1) both;
246
+ }
247
+
248
+ @keyframes hz-plane-in {
249
+ from { opacity: 0; transform: translateY(-4px); }
250
+ to { opacity: 1; transform: none; }
251
+ }
252
+
253
+ .hz-masthead .hz-veil {
254
+ position: fixed;
255
+ top: calc(var(--header) + env(safe-area-inset-top));
256
+ left: 0;
257
+ right: 0;
258
+ bottom: 0;
259
+ z-index: var(--z-base);
260
+ background: color-mix(in srgb, var(--pure-black) 40%, transparent);
261
+ backdrop-filter: blur(24px) saturate(1.2);
262
+ -webkit-backdrop-filter: blur(24px) saturate(1.2);
263
+ }
264
+
265
+ .hz-masthead .hz-columns {
266
+ display: grid;
267
+ grid-auto-flow: column;
268
+ grid-auto-columns: max-content;
269
+ justify-content: start;
270
+ gap: clamp(24px, 3vw, 64px);
271
+ padding: 36px calc(var(--page-gutter) + 8px) 48px;
272
+ }
273
+
274
+ :is(.hz-masthead, .hz-sheet) .hz-column {
275
+ display: flex;
276
+ flex-direction: column;
277
+ gap: 2px;
278
+ min-width: 0;
279
+ transition: opacity 160ms ease;
280
+ }
281
+
282
+ /* The column under the pointer is the one being read; the others step back. */
283
+ .hz-masthead .hz-columns:has(> .hz-column:hover) > .hz-column:not(:hover) {
284
+ opacity: 0.45;
285
+ }
286
+
287
+ :is(.hz-masthead, .hz-sheet) .hz-column-title {
288
+ margin: 0 0 10px;
289
+ font-size: var(--text-sm);
290
+ font-weight: var(--weight-semibold);
291
+ color: var(--foreground);
292
+ text-decoration: none;
293
+ }
294
+
295
+ /* `justify-content` is stated on every row: this sheet centres any link whose
296
+ one element child is an svg, and ↗ is exactly that. A row is as wide as its
297
+ words, so a keyboard ring hugs the words it names rather than the column. */
298
+ :is(.hz-masthead, .hz-sheet) .hz-column a {
299
+ display: block;
300
+ width: fit-content;
301
+ justify-content: flex-start;
302
+ margin: 0 -8px;
303
+ padding: 5px 8px;
304
+ border-radius: 8px;
305
+ font-size: var(--text-sm);
306
+ font-weight: var(--weight-medium);
307
+ color: var(--muted-foreground);
308
+ white-space: nowrap;
309
+ text-decoration: none;
310
+ transition: color 120ms ease;
311
+ }
312
+
313
+ :is(.hz-masthead, .hz-sheet) .hz-column a:hover,
314
+ :is(.hz-masthead, .hz-sheet) .hz-column a:focus-visible {
315
+ color: var(--foreground);
316
+ }
317
+
318
+ /* The destinations someone arrives wanting, in display type. */
319
+ .hz-masthead .hz-column[data-lead] a {
320
+ padding: 2px 8px;
321
+ font-size: var(--text-3xl);
322
+ font-weight: var(--weight-normal);
323
+ line-height: 1.28;
324
+ letter-spacing: -0.01em;
325
+ color: var(--foreground);
326
+ }
327
+
328
+ /* ------------------------------------------------------------------ log in */
329
+
330
+ .hz-masthead .hz-card {
331
+ position: absolute;
332
+ top: calc(100% + 8px);
333
+ right: 0;
334
+ display: grid;
335
+ gap: 2px;
336
+ min-width: 240px;
337
+ padding: 6px;
338
+ border: 1px solid var(--border);
339
+ border-radius: 12px;
340
+ background: var(--chrome-panel);
341
+ box-shadow: 0 24px 60px -16px color-mix(in srgb, var(--pure-black) 75%, transparent);
342
+ animation: hz-plane-in 160ms cubic-bezier(0.2, 0.9, 0.3, 1) both;
343
+ }
344
+
345
+ .hz-masthead .hz-card a {
346
+ display: grid;
347
+ gap: 2px;
348
+ padding: 8px 10px;
349
+ border-radius: 8px;
350
+ color: var(--foreground);
351
+ font-size: var(--text-sm);
352
+ font-weight: var(--weight-semibold);
353
+ }
354
+
355
+ .hz-masthead .hz-card a:hover,
356
+ .hz-masthead .hz-card a:focus-visible {
357
+ background: color-mix(in srgb, var(--foreground) 6%, transparent);
358
+ }
359
+
360
+ .hz-masthead .hz-card small {
361
+ font-size: var(--text-xs);
362
+ font-weight: var(--weight-normal);
363
+ color: var(--muted-foreground);
364
+ }
365
+
366
+ /* ------------------------------------------------------------------ phone */
367
+
368
+ .hz-sheet {
369
+ position: fixed;
370
+ top: calc(var(--header) + env(safe-area-inset-top));
371
+ left: 0;
372
+ right: 0;
373
+ bottom: 0;
374
+ z-index: var(--z-overlay);
375
+ overflow-y: auto;
376
+ overscroll-behavior: contain;
377
+ padding: 4px var(--page-gutter) calc(24px + env(safe-area-inset-bottom));
378
+ background: var(--chrome-panel);
379
+ font-family: var(--font-sans);
380
+ font-size: 16px;
381
+ line-height: 20px;
382
+ animation: hz-plane-in 160ms cubic-bezier(0.2, 0.9, 0.3, 1) both;
383
+ }
384
+
385
+ .hz-sheet details {
386
+ border-bottom: 1px solid var(--border);
387
+ }
388
+
389
+ .hz-sheet summary {
390
+ display: flex;
391
+ align-items: center;
392
+ gap: 10px;
393
+ min-height: 56px;
394
+ list-style: none;
395
+ font-size: var(--text-xl);
396
+ font-weight: var(--weight-medium);
397
+ color: var(--foreground);
398
+ cursor: pointer;
399
+ }
400
+
401
+ .hz-sheet summary::-webkit-details-marker {
402
+ display: none;
403
+ }
404
+
405
+ .hz-sheet summary .hz-chevron {
406
+ margin-left: auto;
407
+ }
408
+
409
+ .hz-sheet .hz-column {
410
+ padding: 0 0 16px;
411
+ }
412
+
413
+ .hz-sheet .hz-column-title {
414
+ margin: 4px 0 2px;
415
+ font-size: var(--text-xs);
416
+ color: var(--text-tertiary);
417
+ }
418
+
419
+ .hz-sheet .hz-column a,
420
+ .hz-sheet .hz-column[data-lead] a {
421
+ display: flex;
422
+ width: auto;
423
+ align-items: center;
424
+ justify-content: flex-start;
425
+ min-height: 44px;
426
+ margin: 0;
427
+ padding: 0;
428
+ font-size: var(--text-lg);
429
+ font-weight: var(--weight-normal);
430
+ letter-spacing: 0;
431
+ line-height: 1.2;
432
+ white-space: normal;
433
+ }
434
+
435
+ .hz-sheet .hz-column[data-lead] a {
436
+ font-size: var(--text-xl);
437
+ }
438
+
439
+ .hz-sheet .hz-doors {
440
+ display: grid;
441
+ gap: 4px;
442
+ padding-top: 20px;
443
+ }
444
+
445
+ .hz-sheet .hz-door {
446
+ display: flex;
447
+ align-items: center;
448
+ justify-content: flex-start;
449
+ min-height: 44px;
450
+ font-size: var(--text-lg);
451
+ color: var(--foreground);
452
+ text-decoration: none;
453
+ }
454
+
455
+ .hz-sheet .hz-try {
456
+ height: 48px;
457
+ margin-top: 12px;
458
+ font-size: var(--text-base);
459
+ }
460
+
461
+ /* One compact bar on a phone and a tablet: the name, search, and the menu. */
462
+ @media (max-width: 1023px) {
463
+ .hz-masthead .hz-nav,
464
+ .hz-masthead .hz-login,
465
+ .hz-masthead .hz-end > .hz-try,
466
+ .hz-masthead .hz-brand .hz-company {
467
+ display: none;
468
+ }
469
+
470
+ .hz-masthead .hz-brand .hz-wordmark {
471
+ padding-right: 12px;
472
+ }
473
+
474
+ .hz-masthead .hz-find {
475
+ width: 44px;
476
+ height: 44px;
477
+ margin-left: auto;
478
+ }
479
+
480
+ .hz-masthead .hz-end {
481
+ margin-left: 0;
482
+ }
483
+
484
+ .hz-masthead .hz-toggle {
485
+ display: inline-grid;
486
+ }
487
+ }
488
+
489
+ /* Between a tablet and a wide laptop the row keeps its labels and drops its marks. */
490
+ @media (min-width: 1024px) and (max-width: 1199px) {
491
+ .hz-masthead .hz-nav .hz-mark {
492
+ display: none;
493
+ }
494
+ }
495
+
496
+ @media (prefers-reduced-motion: reduce) {
497
+ .hz-masthead .hz-plane,
498
+ .hz-masthead .hz-card,
499
+ .hz-sheet {
500
+ animation: none;
501
+ }
502
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.27.22",
3
+ "version": "8.27.23",
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": {
@@ -91,6 +91,19 @@
91
91
  "require": "./dist/glass.cjs",
92
92
  "default": "./dist/glass.js"
93
93
  },
94
+ "./masthead": {
95
+ "types": "./dist/masthead/index.d.ts",
96
+ "import": "./dist/masthead/index.js",
97
+ "require": "./dist/masthead/index.cjs",
98
+ "default": "./dist/masthead/index.js"
99
+ },
100
+ "./masthead/nav": {
101
+ "types": "./dist/masthead/nav.d.ts",
102
+ "import": "./dist/masthead/nav.js",
103
+ "require": "./dist/masthead/nav.cjs",
104
+ "default": "./dist/masthead/nav.js"
105
+ },
106
+ "./masthead.css": "./dist/masthead.css",
94
107
  "./product": {
95
108
  "types": "./dist/product/index.d.ts",
96
109
  "import": "./dist/product/index.js",
@@ -287,6 +300,7 @@
287
300
  "@hanzogui/config": "^8.3.5",
288
301
  "@hanzogui/lucide-icons-2": "^8.3.5",
289
302
  "@hanzogui/next-theme": "^8.3.5",
303
+ "@hanzogui/shell": "^8.3.5",
290
304
  "@hanzogui/telemetry": "^8.3.5",
291
305
  "@hanzogui/toast": "^8.3.5",
292
306
  "next": ">=16.3.3",
@@ -311,6 +325,9 @@
311
325
  "@hanzogui/next-theme": {
312
326
  "optional": true
313
327
  },
328
+ "@hanzogui/shell": {
329
+ "optional": true
330
+ },
314
331
  "next": {
315
332
  "optional": true
316
333
  },
@@ -329,6 +346,7 @@
329
346
  "@hanzogui/core": "8.3.5",
330
347
  "@hanzogui/lucide-icons-2": "8.3.5",
331
348
  "@hanzogui/next-theme": "8.3.5",
349
+ "@hanzogui/shell": "8.3.5",
332
350
  "@hanzogui/telemetry": "8.3.5",
333
351
  "@hanzogui/toast": "8.3.5",
334
352
  "@hanzogui/web": "8.3.5",
@@ -351,7 +369,7 @@
351
369
  "license": "Apache-2.0 OR MIT",
352
370
  "author": "Hanzo AI <dev@hanzo.ai>",
353
371
  "scripts": {
354
- "build": "rm -rf dist dist-cjs && tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json --noCheck && mkdir -p dist/styles && node scripts/compose-theme.mjs && cp src/styles/motion.css dist/styles/motion.css && cp src/next.cjs dist/next.cjs && node scripts/postbuild.mjs && node scripts/gen-css.mjs",
372
+ "build": "rm -rf dist dist-cjs && tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json --noCheck && mkdir -p dist/styles && node scripts/compose-theme.mjs && cp src/styles/motion.css dist/styles/motion.css && cp src/masthead/masthead.css dist/masthead.css && cp src/next.cjs dist/next.cjs && node scripts/postbuild.mjs && node scripts/gen-css.mjs",
355
373
  "clean": "rm -rf dist dist-cjs types",
356
374
  "gen:primitives": "node scripts/gen-primitives.mjs",
357
375
  "tc": "tsc --noEmit",