@hanzo/ui 8.0.42 → 8.0.44

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.
Files changed (36) hide show
  1. package/README.md +1 -1
  2. package/dist/backends/gui/button.cjs +19 -2
  3. package/dist/backends/gui/button.d.ts.map +1 -1
  4. package/dist/backends/gui/button.js +19 -2
  5. package/dist/backends/gui/button.js.map +1 -1
  6. package/dist/backends/gui/focus.cjs +36 -0
  7. package/dist/backends/gui/focus.d.ts +39 -0
  8. package/dist/backends/gui/focus.d.ts.map +1 -0
  9. package/dist/backends/gui/focus.js +34 -0
  10. package/dist/backends/gui/focus.js.map +1 -0
  11. package/dist/backends/gui/glass.cjs +31 -0
  12. package/dist/backends/gui/glass.d.ts +9 -0
  13. package/dist/backends/gui/glass.d.ts.map +1 -0
  14. package/dist/backends/gui/glass.js +29 -0
  15. package/dist/backends/gui/glass.js.map +1 -0
  16. package/dist/backends/gui/index.cjs +3 -1
  17. package/dist/backends/gui/index.d.ts +1 -0
  18. package/dist/backends/gui/index.d.ts.map +1 -1
  19. package/dist/backends/gui/index.js +1 -0
  20. package/dist/backends/gui/index.js.map +1 -1
  21. package/dist/backends/gui/input.cjs +2 -1
  22. package/dist/backends/gui/input.d.ts.map +1 -1
  23. package/dist/backends/gui/input.js +2 -1
  24. package/dist/backends/gui/input.js.map +1 -1
  25. package/dist/backends/gui/textarea.cjs +2 -1
  26. package/dist/backends/gui/textarea.d.ts.map +1 -1
  27. package/dist/backends/gui/textarea.js +2 -1
  28. package/dist/backends/gui/textarea.js.map +1 -1
  29. package/dist/primitives/Glass.cjs +8 -0
  30. package/dist/primitives/Glass.d.ts +2 -0
  31. package/dist/primitives/Glass.d.ts.map +1 -0
  32. package/dist/primitives/Glass.js +5 -0
  33. package/dist/primitives/Glass.js.map +1 -0
  34. package/dist/styles.css +56 -39
  35. package/dist/theme.css +35 -39
  36. package/package.json +2 -2
package/README.md CHANGED
@@ -117,4 +117,4 @@ registerField('rating', { Display: MyStars, Input: MyStarPicker })
117
117
  - **Clean-room** — original implementation, no GPL / Twenty code. Airtable/Twenty-*class* polish, our own code.
118
118
  - **Cross-platform** — web + native + desktop, because it's only `@hanzo/gui`.
119
119
 
120
- BSD-3-Clause · Hanzo AI
120
+ MIT · Hanzo AI — see [LICENSE.md](../../LICENSE.md). HIP-0137 (`hanzoai/hips`).
@@ -59,8 +59,25 @@ const Frame = (0, gui_1.styled)(gui_1.Button.Frame, {
59
59
  cursor: 'pointer',
60
60
  variants: {
61
61
  variant: {
62
- default: { bg: '$color12', color: '$color1', hoverStyle: { opacity: 0.9 } },
63
- primary: { bg: '$color12', color: '$color1', hoverStyle: { opacity: 0.9 } },
62
+ // The unmarked case is QUIET: a control on the surface ladder, hairline
63
+ // border, hover brightens border more than fill. `default` used to be the
64
+ // same value as `primary` (white filled), so every unstyled <Button> in
65
+ // every app shouted — the loudest treatment must be asked for by name.
66
+ default: {
67
+ bg: '$color2',
68
+ color: '$color12',
69
+ borderColor: '$borderColor',
70
+ hoverStyle: { bg: '$color3', borderColor: '$color6' },
71
+ },
72
+ // The strongest control WITHOUT a white slab — the macOS dark pushbutton:
73
+ // an elevated gray fill, white text, hairline. On an otherwise quiet page
74
+ // this IS the loudest thing; a $color12 fill read as a glare, not a CTA.
75
+ primary: {
76
+ bg: '$color5',
77
+ color: '$color12',
78
+ borderColor: '$color6',
79
+ hoverStyle: { bg: '$color6', borderColor: '$color7' },
80
+ },
64
81
  destructive: { bg: '$red9', color: '$white1', hoverStyle: { opacity: 0.9 } },
65
82
  outline: {
66
83
  bg: '$background',
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/button.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAiC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK1F,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,aAAa,GACb,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,GACN,SAAS,GACT,QAAQ,GACR,WAAW,CAAA;AAEf,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAqBjF,QAAA,MAAM,KAAK;;;;;;;;8CA8CT,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,gCAI5B;IAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,WAK1E,CAAA;AAEd,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC,GAAG;IAC9F,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;CACrC,CAAA;AAED,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,SAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,2CA2Bb;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/button.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAiC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK1F,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,aAAa,GACb,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,GACN,SAAS,GACT,QAAQ,GACR,WAAW,CAAA;AAEf,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAqBjF,QAAA,MAAM,KAAK;;;;;;;;8CA+DT,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,gCAI5B;IAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,WAK1E,CAAA;AAEd,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC,GAAG;IAC9F,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;CACrC,CAAA;AAED,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,SAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,2CA2Bb;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -55,8 +55,25 @@ const Frame = styled(GuiButton.Frame, {
55
55
  cursor: 'pointer',
56
56
  variants: {
57
57
  variant: {
58
- default: { bg: '$color12', color: '$color1', hoverStyle: { opacity: 0.9 } },
59
- primary: { bg: '$color12', color: '$color1', hoverStyle: { opacity: 0.9 } },
58
+ // The unmarked case is QUIET: a control on the surface ladder, hairline
59
+ // border, hover brightens border more than fill. `default` used to be the
60
+ // same value as `primary` (white filled), so every unstyled <Button> in
61
+ // every app shouted — the loudest treatment must be asked for by name.
62
+ default: {
63
+ bg: '$color2',
64
+ color: '$color12',
65
+ borderColor: '$borderColor',
66
+ hoverStyle: { bg: '$color3', borderColor: '$color6' },
67
+ },
68
+ // The strongest control WITHOUT a white slab — the macOS dark pushbutton:
69
+ // an elevated gray fill, white text, hairline. On an otherwise quiet page
70
+ // this IS the loudest thing; a $color12 fill read as a glare, not a CTA.
71
+ primary: {
72
+ bg: '$color5',
73
+ color: '$color12',
74
+ borderColor: '$color6',
75
+ hoverStyle: { bg: '$color6', borderColor: '$color7' },
76
+ },
60
77
  destructive: { bg: '$red9', color: '$white1', hoverStyle: { opacity: 0.9 } },
61
78
  outline: {
62
79
  bg: '$background',
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/backends/gui/button.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/backends/gui/button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAuC,MAAM,OAAO,CAAA;AAE1F,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAejC,MAAM,MAAM,GAA+B;IACzC,OAAO,EAAE,EAAE;IACX,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;CACd,CAAA;AAED,gFAAgF;AAChF,MAAM,IAAI,GAA+B;IACvC,OAAO,EAAE,IAAI;IACb,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;CAChB,CAAA;AAED,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;IACpC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,SAAS;IAEjB,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,wEAAwE;YACxE,0EAA0E;YAC1E,wEAAwE;YACxE,uEAAuE;YACvE,OAAO,EAAE;gBACP,EAAE,EAAE,SAAS;gBACb,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,cAAc;gBAC3B,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;aACtD;YACD,0EAA0E;YAC1E,0EAA0E;YAC1E,yEAAyE;YACzE,OAAO,EAAE;gBACP,EAAE,EAAE,SAAS;gBACb,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,SAAS;gBACtB,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;aACtD;YACD,WAAW,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAC5E,OAAO,EAAE;gBACP,EAAE,EAAE,aAAa;gBACjB,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,cAAc;gBAC3B,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;aAC9B;YACD,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAC7E,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;YAC9E,IAAI,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE;YAC/F,MAAM,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE;YACjG,SAAS,EAAE;gBACT,EAAE,EAAE,aAAa;gBACjB,KAAK,EAAE,UAAU;gBACjB,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE;aACnE;SACF;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;YAC7C,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;YAChD,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;YACnC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;YACxD,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;YACzE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;SAC1E;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;SACjE;KACO;IAEV,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;CACzD,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,OAAO,EACP,IAAI,EACJ,SAAS,MAC2E,EAAE,EAAE,EAAE;AAC1F,8EAA8E;AAC9E,8EAA8E;AAC9E,mCAAmC;AACnC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,OAAO,IAAI,SAAS,EAAE,EAAE,OAAO,IAAI,IAAI,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KACxG,IAAI,CAAC,GAAG,CAAC,CAAA;AA4Bd,SAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,SAAS,EAChB,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,KAAK,EACjB,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACI;IACZ,MAAM,QAAQ,GAAG,IAAI,IAAI,SAAS,CAAA;IAClC,+EAA+E;IAC/E,+EAA+E;IAC/E,2EAA2E;IAC3E,gFAAgF;IAChF,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,IAAI,GAAG,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAkC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;IAChF,OAAO,CACL,MAAC,KAAK,iBACM,QAAQ,kBACJ,OAAO,IAAI,SAAS,eACvB,QAAQ,EACnB,OAAO,EAAE,OAAO,IAAI,SAAS,EAC7B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAI,IAAI,CAAC,KAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EACvG,QAAQ,EAAE,QAAQ,IAAI,SAAS,KAC3B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EACpC,SAAS,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KACnD,KAAK,aAER,SAAS,IAAI,KAAC,OAAO,IAAC,IAAI,EAAC,OAAO,GAAG,EACrC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAC3D,CACT,CAAA;AACH,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -0,0 +1,36 @@
1
+ 'use client';"use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FOCUS = void 0;
4
+ /**
5
+ * How a text field says it has focus.
6
+ *
7
+ * A field already has an edge, so focus BRIGHTENS that edge — it never adds a
8
+ * second shape around it. One rule, shared by every field, so `Input` and
9
+ * `Textarea` cannot drift apart.
10
+ *
11
+ * `@hanzogui/input` ships the opposite of both halves, and each failure hides
12
+ * the other:
13
+ *
14
+ * - `focusVisibleStyle` draws `outline: 2px solid $outlineColor` at a 2px
15
+ * offset. Tamagui emits that as `:root:root:root:root ._outlineWidth-…
16
+ * :focus-visible { outline-width: 2px !important }`, which outranks any
17
+ * plain stylesheet — a consumer's `outline: none` cannot win, and one did
18
+ * try. Setting the width to 0 HERE is the only way to retract it, because
19
+ * a prop replaces the variant's atomic class rather than competing with it.
20
+ *
21
+ * - `focusStyle` brightens to `$borderColorFocus`, which in this design
22
+ * system resolves to the SAME value as `$borderColor`. So the cue that was
23
+ * supposed to make the ring unnecessary rendered nothing at all, and the
24
+ * ring was the only feedback a focused field had.
25
+ *
26
+ * `$color06` against a `$borderColor` rest is ~5:1, so the edge alone carries
27
+ * the indicator (WCAG 2.4.13) and nothing else needs to be drawn.
28
+ *
29
+ * Spread BEFORE a component's own `...props`, so a call site can still say
30
+ * otherwise.
31
+ */
32
+ const FOCUS = {
33
+ focusStyle: { borderColor: '$color06' },
34
+ focusVisibleStyle: { outlineWidth: 0, outlineStyle: 'none' },
35
+ };
36
+ exports.FOCUS = FOCUS;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * How a text field says it has focus.
3
+ *
4
+ * A field already has an edge, so focus BRIGHTENS that edge — it never adds a
5
+ * second shape around it. One rule, shared by every field, so `Input` and
6
+ * `Textarea` cannot drift apart.
7
+ *
8
+ * `@hanzogui/input` ships the opposite of both halves, and each failure hides
9
+ * the other:
10
+ *
11
+ * - `focusVisibleStyle` draws `outline: 2px solid $outlineColor` at a 2px
12
+ * offset. Tamagui emits that as `:root:root:root:root ._outlineWidth-…
13
+ * :focus-visible { outline-width: 2px !important }`, which outranks any
14
+ * plain stylesheet — a consumer's `outline: none` cannot win, and one did
15
+ * try. Setting the width to 0 HERE is the only way to retract it, because
16
+ * a prop replaces the variant's atomic class rather than competing with it.
17
+ *
18
+ * - `focusStyle` brightens to `$borderColorFocus`, which in this design
19
+ * system resolves to the SAME value as `$borderColor`. So the cue that was
20
+ * supposed to make the ring unnecessary rendered nothing at all, and the
21
+ * ring was the only feedback a focused field had.
22
+ *
23
+ * `$color06` against a `$borderColor` rest is ~5:1, so the edge alone carries
24
+ * the indicator (WCAG 2.4.13) and nothing else needs to be drawn.
25
+ *
26
+ * Spread BEFORE a component's own `...props`, so a call site can still say
27
+ * otherwise.
28
+ */
29
+ declare const FOCUS: {
30
+ readonly focusStyle: {
31
+ readonly borderColor: "$color06";
32
+ };
33
+ readonly focusVisibleStyle: {
34
+ readonly outlineWidth: 0;
35
+ readonly outlineStyle: "none";
36
+ };
37
+ };
38
+ export { FOCUS };
39
+ //# sourceMappingURL=focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/focus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,QAAA,MAAM,KAAK;;;;;;;;CAGD,CAAA;AAEV,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,34 @@
1
+ 'use client';/**
2
+ * How a text field says it has focus.
3
+ *
4
+ * A field already has an edge, so focus BRIGHTENS that edge — it never adds a
5
+ * second shape around it. One rule, shared by every field, so `Input` and
6
+ * `Textarea` cannot drift apart.
7
+ *
8
+ * `@hanzogui/input` ships the opposite of both halves, and each failure hides
9
+ * the other:
10
+ *
11
+ * - `focusVisibleStyle` draws `outline: 2px solid $outlineColor` at a 2px
12
+ * offset. Tamagui emits that as `:root:root:root:root ._outlineWidth-…
13
+ * :focus-visible { outline-width: 2px !important }`, which outranks any
14
+ * plain stylesheet — a consumer's `outline: none` cannot win, and one did
15
+ * try. Setting the width to 0 HERE is the only way to retract it, because
16
+ * a prop replaces the variant's atomic class rather than competing with it.
17
+ *
18
+ * - `focusStyle` brightens to `$borderColorFocus`, which in this design
19
+ * system resolves to the SAME value as `$borderColor`. So the cue that was
20
+ * supposed to make the ring unnecessary rendered nothing at all, and the
21
+ * ring was the only feedback a focused field had.
22
+ *
23
+ * `$color06` against a `$borderColor` rest is ~5:1, so the edge alone carries
24
+ * the indicator (WCAG 2.4.13) and nothing else needs to be drawn.
25
+ *
26
+ * Spread BEFORE a component's own `...props`, so a call site can still say
27
+ * otherwise.
28
+ */
29
+ const FOCUS = {
30
+ focusStyle: { borderColor: '$color06' },
31
+ focusVisibleStyle: { outlineWidth: 0, outlineStyle: 'none' },
32
+ };
33
+ export { FOCUS };
34
+ //# sourceMappingURL=focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../src/backends/gui/focus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,KAAK,GAAG;IACZ,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;IACvC,iBAAiB,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE;CACpD,CAAA;AAEV,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,31 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Glass = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Glass — the ONE frosted material, for FLOATING chrome only (menus, dialogs,
8
+ * popovers, docked toolbars). macOS/iOS vibrancy: a translucent ground the
9
+ * backdrop blurs through, sealed with a hairline border.
10
+ *
11
+ * It is a surface, not a layout: it composes AROUND content and adds nothing
12
+ * but the material. The component itself is a solid raised panel; the
13
+ * translucency + blur live in theme.css under `@supports (backdrop-filter)`,
14
+ * keyed by [data-slot="glass"] — so a platform that cannot blur (older
15
+ * engines, native without a blur view) keeps the solid panel and content
16
+ * never becomes illegible over a busy backdrop. One material, declared once.
17
+ *
18
+ * Page sections never wear glass; they sit on the surface ladder ($color2/3).
19
+ */
20
+ const gui_1 = require("@hanzo/gui");
21
+ const slot_1 = require("./slot.cjs");
22
+ const GlassFrame = (0, gui_1.styled)(gui_1.YStack, {
23
+ name: 'Glass',
24
+ borderWidth: 1,
25
+ borderColor: '$borderColor',
26
+ // The stand-in ground; theme.css swaps it for the blurred material where
27
+ // backdrop-filter is real.
28
+ bg: '$color2',
29
+ });
30
+ const Glass = (props) => (0, jsx_runtime_1.jsx)(GlassFrame, { ...(0, slot_1.slot)('glass'), ...props });
31
+ exports.Glass = Glass;
@@ -0,0 +1,9 @@
1
+ import type { ComponentProps } from 'react';
2
+ declare const GlassFrame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
3
+ elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
4
+ fullscreen?: boolean | undefined;
5
+ }, import("@hanzogui/web").StaticConfigPublic>;
6
+ export type GlassProps = ComponentProps<typeof GlassFrame>;
7
+ declare const Glass: (props: GlassProps) => import("react/jsx-runtime").JSX.Element;
8
+ export { Glass };
9
+ //# sourceMappingURL=glass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/glass.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3C,QAAA,MAAM,UAAU;;;8CAOd,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,CAAA;AAE1D,QAAA,MAAM,KAAK,GAAI,OAAO,UAAU,4CAAiD,CAAA;AAEjF,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Glass — the ONE frosted material, for FLOATING chrome only (menus, dialogs,
5
+ * popovers, docked toolbars). macOS/iOS vibrancy: a translucent ground the
6
+ * backdrop blurs through, sealed with a hairline border.
7
+ *
8
+ * It is a surface, not a layout: it composes AROUND content and adds nothing
9
+ * but the material. The component itself is a solid raised panel; the
10
+ * translucency + blur live in theme.css under `@supports (backdrop-filter)`,
11
+ * keyed by [data-slot="glass"] — so a platform that cannot blur (older
12
+ * engines, native without a blur view) keeps the solid panel and content
13
+ * never becomes illegible over a busy backdrop. One material, declared once.
14
+ *
15
+ * Page sections never wear glass; they sit on the surface ladder ($color2/3).
16
+ */
17
+ import { YStack, styled } from '@hanzo/gui';
18
+ import { slot } from './slot.js';
19
+ const GlassFrame = styled(YStack, {
20
+ name: 'Glass',
21
+ borderWidth: 1,
22
+ borderColor: '$borderColor',
23
+ // The stand-in ground; theme.css swaps it for the blurred material where
24
+ // backdrop-filter is real.
25
+ bg: '$color2',
26
+ });
27
+ const Glass = (props) => _jsx(GlassFrame, { ...slot('glass'), ...props });
28
+ export { Glass };
29
+ //# sourceMappingURL=glass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glass.js","sourceRoot":"","sources":["../../../src/backends/gui/glass.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE;IAChC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,cAAc;IAC3B,yEAAyE;IACzE,2BAA2B;IAC3B,EAAE,EAAE,SAAS;CACd,CAAC,CAAA;AAIF,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAC,UAAU,OAAK,IAAI,CAAC,OAAO,CAAC,KAAM,KAAK,GAAI,CAAA;AAEjF,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -17,7 +17,7 @@
17
17
  // node scripts/gen-primitives.mjs
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.DropdownMenuSub = exports.DropdownMenuPortal = exports.DropdownMenuGroup = exports.DropdownMenuShortcut = exports.DropdownMenuSeparator = exports.DropdownMenuLabel = exports.DropdownMenuRadioItem = exports.DropdownMenuCheckboxItem = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenuTrigger = exports.DropdownMenu = exports.DialogTrigger = exports.DialogTitle = exports.DialogPortal = exports.DialogOverlay = exports.DialogHeader = exports.DialogFooter = exports.DialogDescription = exports.DialogContent = exports.DialogClose = exports.Dialog = exports.CommandSeparator = exports.CommandShortcut = exports.CommandItem = exports.CommandGroup = exports.CommandEmpty = exports.CommandList = exports.CommandInput = exports.CommandDialog = exports.Command = exports.CollapsibleContent = exports.CollapsibleTrigger = exports.Collapsible = exports.Checkbox = exports.CardContent = exports.CardDescription = exports.CardAction = exports.CardTitle = exports.CardFooter = exports.CardHeader = exports.Card = exports.buttonVariants = exports.Button = exports.badgeVariants = exports.Badge = exports.AvatarFallback = exports.AvatarImage = exports.Avatar = exports.AspectRatio = void 0;
20
- exports.TooltipProvider = exports.TooltipContent = exports.TooltipTrigger = exports.Tooltip = exports.toast = exports.Toaster = exports.Textarea = exports.TabsContent = exports.TabsTrigger = exports.TabsList = exports.Tabs = exports.Switch = exports.Slider = exports.Separator = exports.SelectScrollDownButton = exports.SelectScrollUpButton = exports.SelectSeparator = exports.SelectItem = exports.SelectLabel = exports.SelectContent = exports.SelectTrigger = exports.SelectValue = exports.SelectGroup = exports.Select = exports.ScrollBar = exports.ScrollArea = exports.ResizableHandle = exports.ResizablePanel = exports.ResizablePanelGroup = exports.Progress = exports.PopoverClose = exports.PopoverAnchor = exports.PopoverContent = exports.PopoverTrigger = exports.Popover = exports.Label = exports.Input = exports.DropdownMenuRadioGroup = exports.DropdownMenuSubTrigger = exports.DropdownMenuSubContent = void 0;
20
+ exports.TooltipProvider = exports.TooltipContent = exports.TooltipTrigger = exports.Tooltip = exports.toast = exports.Toaster = exports.Textarea = exports.TabsContent = exports.TabsTrigger = exports.TabsList = exports.Tabs = exports.Switch = exports.Slider = exports.Separator = exports.SelectScrollDownButton = exports.SelectScrollUpButton = exports.SelectSeparator = exports.SelectItem = exports.SelectLabel = exports.SelectContent = exports.SelectTrigger = exports.SelectValue = exports.SelectGroup = exports.Select = exports.ScrollBar = exports.ScrollArea = exports.ResizableHandle = exports.ResizablePanel = exports.ResizablePanelGroup = exports.Progress = exports.PopoverClose = exports.PopoverAnchor = exports.PopoverContent = exports.PopoverTrigger = exports.Popover = exports.Label = exports.Input = exports.Glass = exports.DropdownMenuRadioGroup = exports.DropdownMenuSubTrigger = exports.DropdownMenuSubContent = void 0;
21
21
  var aspect_ratio_1 = require("./aspect-ratio.cjs");
22
22
  Object.defineProperty(exports, "AspectRatio", { enumerable: true, get: function () { return aspect_ratio_1.AspectRatio; } });
23
23
  var avatar_1 = require("./avatar.cjs");
@@ -81,6 +81,8 @@ Object.defineProperty(exports, "DropdownMenuSub", { enumerable: true, get: funct
81
81
  Object.defineProperty(exports, "DropdownMenuSubContent", { enumerable: true, get: function () { return dropdown_menu_1.DropdownMenuSubContent; } });
82
82
  Object.defineProperty(exports, "DropdownMenuSubTrigger", { enumerable: true, get: function () { return dropdown_menu_1.DropdownMenuSubTrigger; } });
83
83
  Object.defineProperty(exports, "DropdownMenuRadioGroup", { enumerable: true, get: function () { return dropdown_menu_1.DropdownMenuRadioGroup; } });
84
+ var glass_1 = require("./glass.cjs");
85
+ Object.defineProperty(exports, "Glass", { enumerable: true, get: function () { return glass_1.Glass; } });
84
86
  var input_1 = require("./input.cjs");
85
87
  Object.defineProperty(exports, "Input", { enumerable: true, get: function () { return input_1.Input; } });
86
88
  var label_1 = require("./label.cjs");
@@ -8,6 +8,7 @@ export { Collapsible, CollapsibleTrigger, CollapsibleContent } from './collapsib
8
8
  export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, type CommandFilter, type CommandProps, } from './command.js';
9
9
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, } from './dialog.js';
10
10
  export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, type DropdownMenuProps, } from './dropdown-menu.js';
11
+ export { Glass, type GlassProps } from './glass.js';
11
12
  export { Input, type InputProps } from './input.js';
12
13
  export { Label } from './label.js';
13
14
  export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose } from './popover.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACxG,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACxG,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
@@ -24,6 +24,7 @@ export { Collapsible, CollapsibleTrigger, CollapsibleContent } from './collapsib
24
24
  export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, } from './command.js';
25
25
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, } from './dialog.js';
26
26
  export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, } from './dropdown-menu.js';
27
+ export { Glass } from './glass.js';
27
28
  export { Input } from './input.js';
28
29
  export { Label } from './label.js';
29
30
  export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose } from './popover.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/gui/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,kFAAkF;AAClF,4EAA4E;AAC5E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,iFAAiF;AACjF,+EAA+E;AAC/E,0BAA0B;AAC1B,EAAE;AACF,6DAA6D;AAC7D,6EAA6E;AAC7E,iFAAiF;AACjF,+CAA+C;AAC/C,oCAAoC;AAEpC,OAAO,EAAE,WAAW,EAAyB,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAsC,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAyD,MAAM,UAAU,CAAA;AACxG,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,GAGjB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,GAIhB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/gui/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,kFAAkF;AAClF,4EAA4E;AAC5E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,iFAAiF;AACjF,+EAA+E;AAC/E,0BAA0B;AAC1B,EAAE;AACF,6DAA6D;AAC7D,6EAA6E;AAC7E,iFAAiF;AACjF,+CAA+C;AAC/C,oCAAoC;AAEpC,OAAO,EAAE,WAAW,EAAyB,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAsC,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAyD,MAAM,UAAU,CAAA;AACxG,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,GAGjB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,GAIhB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA"}
@@ -15,6 +15,7 @@ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
15
15
  const react_1 = require("react");
16
16
  const slot_1 = require("./slot.cjs");
17
17
  const gesture_1 = require("./gesture.cjs");
18
+ const focus_1 = require("./focus.cjs");
18
19
  const HEIGHT = 36;
19
20
  const GUTTER = 12;
20
21
  /** Width reserved for an adornment inside the field. */
@@ -31,7 +32,7 @@ const Input = /* @__PURE__ */ (0, react_1.forwardRef)(function Input({ startAdor
31
32
  const [revealed, setRevealed] = (0, react_1.useState)(false);
32
33
  const isPassword = type === 'password' || secureTextEntry === true;
33
34
  const toggle = isPassword && !hidePasswordToggle;
34
- const field = ((0, jsx_runtime_1.jsx)(gui_1.Input, { ref: ref, ...(0, slot_1.slot)('input'), secureTextEntry: isPassword && !revealed, height: HEIGHT, width: "100%", minW: 0, rounded: "$3", bg: "transparent", borderWidth: 1, borderColor: "$borderColor", placeholderTextColor: "$color10", fontSize: "$3", pl: startAdornment ? WELL : GUTTER, pr: endAdornment || toggle ? WELL : GUTTER, ...props }));
35
+ const field = ((0, jsx_runtime_1.jsx)(gui_1.Input, { ref: ref, ...(0, slot_1.slot)('input'), secureTextEntry: isPassword && !revealed, height: HEIGHT, width: "100%", minW: 0, rounded: "$3", bg: "transparent", borderWidth: 1, borderColor: "$borderColor", ...focus_1.FOCUS, placeholderTextColor: "$color10", fontSize: "$3", pl: startAdornment ? WELL : GUTTER, pr: endAdornment || toggle ? WELL : GUTTER, ...props }));
35
36
  if (!startAdornment && !endAdornment && !toggle)
36
37
  return field;
37
38
  return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { position: "relative", width: "100%", items: "center", children: [startAdornment ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...well('l'), pointerEvents: "none", opacity: 0.6, children: startAdornment })) : null, field, toggle ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...well('r'), cursor: "pointer", ...(0, gesture_1.touch)(20), onPress: () => setRevealed((v) => !v), "aria-label": revealed ? 'Hide password' : 'Show password', children: revealed ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.EyeOff, { size: 16 }) : (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Eye, { size: 16 }) })) : endAdornment ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...well('r'), opacity: 0.6, children: endAdornment })) : null] }));
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/input.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAU,MAAM,YAAY,CAAA;AAEtD,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AASjF,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,EAAE,UAAU,CAAC,GAAG;IAC3E,yEAAyE;IACzE,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,uFAAuF;IACvF,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAYD,QAAA,MAAM,KAAK,sHAuDT,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/input.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAU,MAAM,YAAY,CAAA;AAEtD,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAUjF,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,EAAE,UAAU,CAAC,GAAG;IAC3E,yEAAyE;IACzE,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,uFAAuF;IACvF,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAYD,QAAA,MAAM,KAAK,sHAwDT,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -12,6 +12,7 @@ import { Eye, EyeOff } from '@hanzogui/lucide-icons-2';
12
12
  import { forwardRef, useState } from 'react';
13
13
  import { slot } from './slot.js';
14
14
  import { touch } from './gesture.js';
15
+ import { FOCUS } from './focus.js';
15
16
  const HEIGHT = 36;
16
17
  const GUTTER = 12;
17
18
  /** Width reserved for an adornment inside the field. */
@@ -28,7 +29,7 @@ const Input = /* @__PURE__ */ forwardRef(function Input({ startAdornment, endAdo
28
29
  const [revealed, setRevealed] = useState(false);
29
30
  const isPassword = type === 'password' || secureTextEntry === true;
30
31
  const toggle = isPassword && !hidePasswordToggle;
31
- const field = (_jsx(GuiInput, { ref: ref, ...slot('input'), secureTextEntry: isPassword && !revealed, height: HEIGHT, width: "100%", minW: 0, rounded: "$3", bg: "transparent", borderWidth: 1, borderColor: "$borderColor", placeholderTextColor: "$color10", fontSize: "$3", pl: startAdornment ? WELL : GUTTER, pr: endAdornment || toggle ? WELL : GUTTER, ...props }));
32
+ const field = (_jsx(GuiInput, { ref: ref, ...slot('input'), secureTextEntry: isPassword && !revealed, height: HEIGHT, width: "100%", minW: 0, rounded: "$3", bg: "transparent", borderWidth: 1, borderColor: "$borderColor", ...FOCUS, placeholderTextColor: "$color10", fontSize: "$3", pl: startAdornment ? WELL : GUTTER, pr: endAdornment || toggle ? WELL : GUTTER, ...props }));
32
33
  if (!startAdornment && !endAdornment && !toggle)
33
34
  return field;
34
35
  return (_jsxs(XStack, { position: "relative", width: "100%", items: "center", children: [startAdornment ? (_jsx(XStack, { ...well('l'), pointerEvents: "none", opacity: 0.6, children: startAdornment })) : null, field, toggle ? (_jsx(XStack, { ...well('r'), cursor: "pointer", ...touch(20), onPress: () => setRevealed((v) => !v), "aria-label": revealed ? 'Hide password' : 'Show password', children: revealed ? _jsx(EyeOff, { size: 16 }) : _jsx(Eye, { size: 16 }) })) : endAdornment ? (_jsx(XStack, { ...well('r'), opacity: 0.6, children: endAdornment })) : null] }));
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/backends/gui/input.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/backends/gui/input.tsx"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ exports.Textarea = void 0;
38
38
  const jsx_runtime_1 = require("react/jsx-runtime");
39
39
  const React = __importStar(require("react"));
40
40
  const gui_1 = require("@hanzo/gui");
41
+ const focus_1 = require("./focus.cjs");
41
42
  /** Floor for the grown row count. */
42
43
  const MIN_ROWS = 3;
43
44
  const rowsOf = (v) => typeof v === "string" ? v.split("\n").length : 0;
@@ -45,6 +46,6 @@ const Textarea = /* @__PURE__ */ React.forwardRef(function Textarea({ rows, valu
45
46
  const [typed, setTyped] = React.useState(() => rowsOf(defaultValue));
46
47
  const uncontrolled = value === undefined;
47
48
  const invalid = props["aria-invalid"];
48
- return ((0, jsx_runtime_1.jsx)(gui_1.TextArea, { ref: ref, "data-slot": "textarea", rows: Math.max(rows ?? MIN_ROWS, uncontrolled ? typed : rowsOf(value)), value: value, defaultValue: defaultValue, onChangeText: uncontrolled ? (t) => setTyped(rowsOf(t)) : undefined, width: "100%", minH: 64, rounded: "$4", bg: "transparent", borderWidth: 1, borderColor: invalid && invalid !== "false" ? "$red7" : "$borderColor", placeholderTextColor: "$color10", fontSize: "$3", opacity: props.disabled ? 0.5 : 1, ...props }));
49
+ return ((0, jsx_runtime_1.jsx)(gui_1.TextArea, { ref: ref, "data-slot": "textarea", rows: Math.max(rows ?? MIN_ROWS, uncontrolled ? typed : rowsOf(value)), value: value, defaultValue: defaultValue, onChangeText: uncontrolled ? (t) => setTyped(rowsOf(t)) : undefined, width: "100%", minH: 64, rounded: "$4", bg: "transparent", borderWidth: 1, borderColor: invalid && invalid !== "false" ? "$red7" : "$borderColor", ...focus_1.FOCUS, placeholderTextColor: "$color10", fontSize: "$3", opacity: props.disabled ? 0.5 : 1, ...props }));
49
50
  });
50
51
  exports.Textarea = Textarea;
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQrC;;;;;;;GAOG;AACH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,EAAE,UAAU,CAAC,GACjF,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAA;AAE9D,QAAA,MAAM,QAAQ,wGA0Bb,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AASrC;;;;;;;GAOG;AACH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,EAAE,UAAU,CAAC,GACjF,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAA;AAE9D,QAAA,MAAM,QAAQ,wGA2Bb,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -2,6 +2,7 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { TextArea } from "@hanzo/gui";
5
+ import { FOCUS } from "./focus.js";
5
6
  /** Floor for the grown row count. */
6
7
  const MIN_ROWS = 3;
7
8
  const rowsOf = (v) => typeof v === "string" ? v.split("\n").length : 0;
@@ -9,7 +10,7 @@ const Textarea = /* @__PURE__ */ React.forwardRef(function Textarea({ rows, valu
9
10
  const [typed, setTyped] = React.useState(() => rowsOf(defaultValue));
10
11
  const uncontrolled = value === undefined;
11
12
  const invalid = props["aria-invalid"];
12
- return (_jsx(TextArea, { ref: ref, "data-slot": "textarea", rows: Math.max(rows ?? MIN_ROWS, uncontrolled ? typed : rowsOf(value)), value: value, defaultValue: defaultValue, onChangeText: uncontrolled ? (t) => setTyped(rowsOf(t)) : undefined, width: "100%", minH: 64, rounded: "$4", bg: "transparent", borderWidth: 1, borderColor: invalid && invalid !== "false" ? "$red7" : "$borderColor", placeholderTextColor: "$color10", fontSize: "$3", opacity: props.disabled ? 0.5 : 1, ...props }));
13
+ return (_jsx(TextArea, { ref: ref, "data-slot": "textarea", rows: Math.max(rows ?? MIN_ROWS, uncontrolled ? typed : rowsOf(value)), value: value, defaultValue: defaultValue, onChangeText: uncontrolled ? (t) => setTyped(rowsOf(t)) : undefined, width: "100%", minH: 64, rounded: "$4", bg: "transparent", borderWidth: 1, borderColor: invalid && invalid !== "false" ? "$red7" : "$borderColor", ...FOCUS, placeholderTextColor: "$color10", fontSize: "$3", opacity: props.disabled ? 0.5 : 1, ...props }));
13
14
  });
14
15
  export { Textarea };
15
16
  //# sourceMappingURL=textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/backends/gui/textarea.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,qCAAqC;AACrC,MAAM,QAAQ,GAAG,CAAC,CAAA;AAElB,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE,CAC5B,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAkBlD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAC/C,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;IACpE,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,CAAA;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IACrC,OAAO,CACL,KAAC,QAAQ,IACP,GAAG,EAAE,GAAY,eACP,UAAU,EACpB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACtE,KAAK,EAAE,KAA2B,EAClC,YAAY,EAAE,YAAkC,EAChD,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACnE,KAAK,EAAC,MAAM,EACZ,IAAI,EAAE,EAAE,EACR,OAAO,EAAC,IAAI,EACZ,EAAE,EAAC,aAAa,EAChB,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EACtE,oBAAoB,EAAC,UAAU,EAC/B,QAAQ,EAAC,IAAI,EACb,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAC5B,KAAiC,GACtC,CACH,CAAA;AACD,CAAC,CACF,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/backends/gui/textarea.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,qCAAqC;AACrC,MAAM,QAAQ,GAAG,CAAC,CAAA;AAElB,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE,CAC5B,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAkBlD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAC/C,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;IACpE,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,CAAA;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IACrC,OAAO,CACL,KAAC,QAAQ,IACP,GAAG,EAAE,GAAY,eACP,UAAU,EACpB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACtE,KAAK,EAAE,KAA2B,EAClC,YAAY,EAAE,YAAkC,EAChD,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACnE,KAAK,EAAC,MAAM,EACZ,IAAI,EAAE,EAAE,EACR,OAAO,EAAC,IAAI,EACZ,EAAE,EAAC,aAAa,EAChB,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,KAClE,KAAK,EACT,oBAAoB,EAAC,UAAU,EAC/B,QAAQ,EAAC,IAAI,EACb,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAC5B,KAAiC,GACtC,CACH,CAAA;AACD,CAAC,CACF,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ 'use client';"use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Glass = void 0;
4
+ // GENERATED by scripts/gen-primitives.mjs — do not edit. Per-member entrypoint
5
+ // for hosts that modularize `@hanzo/ui` imports. Source of truth:
6
+ // src/backends/gui/index.ts. Re-run: node scripts/gen-primitives.mjs
7
+ var glass_1 = require("../backends/gui/glass.cjs");
8
+ Object.defineProperty(exports, "Glass", { enumerable: true, get: function () { return glass_1.Glass; } });
@@ -0,0 +1,2 @@
1
+ export { Glass } from '../backends/gui/glass.js';
2
+ //# sourceMappingURL=Glass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Glass.d.ts","sourceRoot":"","sources":["../../src/primitives/Glass.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,5 @@
1
+ // GENERATED by scripts/gen-primitives.mjs — do not edit. Per-member entrypoint
2
+ // for hosts that modularize `@hanzo/ui` imports. Source of truth:
3
+ // src/backends/gui/index.ts. Re-run: node scripts/gen-primitives.mjs
4
+ export { Glass } from '../backends/gui/glass.js';
5
+ //# sourceMappingURL=Glass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Glass.js","sourceRoot":"","sources":["../../src/primitives/Glass.tsx"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kEAAkE;AAClE,qEAAqE;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA"}
package/dist/styles.css CHANGED
@@ -11,18 +11,14 @@
11
11
  * transparent). Values originate in `@hanzo/tokens` (dark/light theme sets) —
12
12
  * the same source `@hanzo/ui/tokens` exposes to code — so CSS and runtime agree.
13
13
  *
14
- * Dark-first Hanzo identity: neutral zinc-on-black, calm, high-contrast. `:root`
15
- * IS the dark look the file said "dark-first" while shipping light at `:root`,
16
- * so an app that mounted <Hanzo> (dark by default) and read `--background` in its
17
- * own CSS got white. `.light` retunes. Both themes also answer to gui's own
18
- * `.t_light` / `.t_dark`, which <Hanzo> stamps on the body, so the CSS custom
19
- * properties and the component tokens name one theme and never disagree.
20
- * Typography is Geist Sans (UI/body) + Geist Mono (code) — bound
14
+ * Dark-first Hanzo identity: neutral zinc-on-black, calm, high-contrast. Add
15
+ * `class="dark"` on <html> for the canonical dark look; `:root` is the light
16
+ * counterpart. Typography is Geist Sans (UI/body) + Geist Mono (code) bound
21
17
  * through `--font-geist-sans` / `--font-geist-mono`; a host that loads Geist
22
18
  * (next/font, @fontsource, CDN) binds those variables and everything inherits
23
19
  * it. No Inter, no system-stack default anywhere.
24
20
  *
25
- * Plain CSS, nothing else: `:root` / `.light` custom properties plus the base font
21
+ * Plain CSS, nothing else: `:root`/`.dark` custom properties plus the base font
26
22
  * and the touch/elevation rules the components name. The Tailwind v4 `@theme
27
23
  * inline` block that used to map these onto utilities is gone with Tailwind.
28
24
  */
@@ -36,13 +32,22 @@
36
32
  --font-geist-mono: var(--font-geist-mono-provided, 'Geist Mono');
37
33
  }
38
34
 
39
- /* Dark-first Hanzo identity neutral zinc-on-black.
40
- Borders are HAIRLINES: 10% white, never a solid chalk line on black. */
41
- :root,
42
- .dark,
43
- .t_dark {
44
- --radius: 0.5rem;
35
+ /* Light identity (the counterpart to dark-first). */
36
+ /* DARK IS THE DEFAULT, and it is the default HERE, not only in a consumer that
37
+ remembers to say so.
45
38
 
39
+ `:root` used to hold the light palette with dark behind `.dark`, so an app
40
+ that imported this file and did not put class="dark" on <html> rendered pure
41
+ white — oklch(1 0 0) — and every surface built that way came out bright white
42
+ by accident. It is also the opposite of @hanzo/design, whose `:root` is dark
43
+ with `.light` to opt out, so mixing the two inverted an app's theme depending
44
+ on which file won.
45
+
46
+ One convention now, matching the design system: `:root` is dark, `.light`
47
+ opts out. `.dark` is kept so an app that already states it is unaffected, and
48
+ `.light` follows both so it can still win. */
49
+ :root,
50
+ .dark {
46
51
  --background: oklch(0.145 0 0);
47
52
  --foreground: oklch(0.985 0 0);
48
53
  --card: oklch(0.205 0 0);
@@ -78,10 +83,9 @@
78
83
  --sidebar-ring: oklch(0.439 0 0);
79
84
  }
80
85
 
81
- /* Light — the counterpart. Ordered before `.dark` so an explicit `.dark` inside
82
- a light subtree still wins the specificity tie. */
83
- .light,
84
- .t_light {
86
+ .light {
87
+ --radius: 0.5rem;
88
+
85
89
  --background: oklch(1 0 0);
86
90
  --foreground: oklch(0.145 0 0);
87
91
  --card: oklch(1 0 0);
@@ -117,27 +121,7 @@
117
121
  --sidebar-ring: oklch(0.708 0 0);
118
122
  }
119
123
 
120
- /* ── The UA reset ─────────────────────────────────────────────────────────────
121
- gui renders REAL <button>, <input> and <textarea> elements, and the browser
122
- has opinions about those: a button is #efefef with a 2px OUTSET border. gui
123
- compiles style props to border-WIDTH and border-COLOR and never emits
124
- border-STYLE, so the UA's `outset` survived every one of them — which is why
125
- a Collapsible trigger rendered as a white bar across a dark page and a Switch
126
- wore a 2px black ring. A <div> was never affected (its border-style starts at
127
- `none`), so this only ever showed on the components that are really buttons.
128
-
129
- `:where()` carries ZERO specificity, so every gui atomic class still wins;
130
- `border: 0 solid transparent` leaves the STYLE resolved so that a component
131
- setting only a width and a colour actually draws its line. */
132
- :where(button, input, textarea) {
133
- appearance: none;
134
- background-color: transparent;
135
- border: 0 solid transparent;
136
- color: inherit;
137
- font: inherit;
138
- margin: 0;
139
- padding: 0;
140
- }
124
+ /* Dark-first Hanzo identity neutral zinc-on-black. */
141
125
 
142
126
  /* Geist by default — UI/body inherits Geist Sans; code/mono surfaces get Geist
143
127
  Mono. Components never hard-code a family; they inherit this or bind
@@ -217,6 +201,18 @@
217
201
  .elevation-3 { box-shadow: var(--hz-elevation-3, 0 8px 24px rgba(0, 0, 0, 0.36)); }
218
202
  .elevation-4 { box-shadow: var(--hz-elevation-4, 0 16px 48px rgba(0, 0, 0, 0.44)); }
219
203
 
204
+ /* Glass — the ONE frosted material (see backends/gui/glass.tsx). The component
205
+ stands as a solid raised panel; only a browser that can actually blur the
206
+ backdrop trades it for the translucent material, so content never sits on
207
+ see-through ground without the blur. !important beats the compiled bg atom. */
208
+ @supports (backdrop-filter: blur(8px)) {
209
+ [data-slot="glass"] {
210
+ background-color: color-mix(in oklab, var(--background) 72%, transparent) !important;
211
+ -webkit-backdrop-filter: blur(20px) saturate(1.8);
212
+ backdrop-filter: blur(20px) saturate(1.8);
213
+ }
214
+ }
215
+
220
216
  /* @hanzo/ui motion primitives — the calm, restrained animation vocabulary the
221
217
  Hanzo surfaces share. One place defines the easing; components apply the class.
222
218
  `className` forwards to the underlying DOM node on web, so the browser
@@ -1005,39 +1001,54 @@
1005
1001
  @media (hover) {:root:root ._bg-0hover-backgroundH3423444:hover{background-color:var(--backgroundHover) !important;}}
1006
1002
  @media (hover) {:root:root ._bg-0hover-color3:hover{background-color:var(--color3) !important;}}
1007
1003
  @media (hover) {:root:root ._bg-0hover-color4:hover{background-color:var(--color4) !important;}}
1004
+ @media (hover) {:root:root ._bg-0hover-color6:hover{background-color:var(--color6) !important;}}
1008
1005
  :root ._bg-background{background-color:var(--background);}
1009
1006
  :root ._bg-backgroundA94988999{background-color:var(--backgroundActive);}
1010
1007
  :root ._bg-borderColor{background-color:var(--borderColor);}
1011
1008
  :root ._bg-color12{background-color:var(--color12);}
1009
+ :root ._bg-color2{background-color:var(--color2);}
1012
1010
  :root ._bg-color3{background-color:var(--color3);}
1013
1011
  :root ._bg-color4{background-color:var(--color4);}
1012
+ :root ._bg-color5{background-color:var(--color5);}
1014
1013
  :root ._bg-red9{background-color:var(--red9);}
1015
1014
  :root ._bg-transparent{background-color:transparent;}
1016
1015
  :root ._bls-solid._bls-solid{border-left-style:solid;}
1017
1016
  :root:root:root ._borderBottomColor-0active-borderColor69916956._borderBottomColor-0active-borderColor69916956:active{border-bottom-color:var(--borderColorHover) !important;}
1018
1017
  :root:root:root ._borderBottomColor-0active-borderColor77378595._borderBottomColor-0active-borderColor77378595:active{border-bottom-color:var(--borderColorPress) !important;}
1019
1018
  :root:root:root:root ._borderBottomColor-0focus-borderColor68052152._borderBottomColor-0focus-borderColor68052152:focus{border-bottom-color:var(--borderColorFocus) !important;}
1019
+ :root:root:root:root ._borderBottomColor-0focus-color06._borderBottomColor-0focus-color06:focus{border-bottom-color:var(--color06) !important;}
1020
1020
  @media (hover) {:root:root ._borderBottomColor-0hover-borderColor69916956._borderBottomColor-0hover-borderColor69916956:hover{border-bottom-color:var(--borderColorHover) !important;}}
1021
+ @media (hover) {:root:root ._borderBottomColor-0hover-color6._borderBottomColor-0hover-color6:hover{border-bottom-color:var(--color6) !important;}}
1022
+ @media (hover) {:root:root ._borderBottomColor-0hover-color7._borderBottomColor-0hover-color7:hover{border-bottom-color:var(--color7) !important;}}
1021
1023
  :root ._borderBottomColor-backgroundF3405682._borderBottomColor-backgroundF3405682{border-bottom-color:var(--backgroundFocus);}
1022
1024
  :root ._borderBottomColor-borderColor._borderBottomColor-borderColor{border-bottom-color:var(--borderColor);}
1025
+ :root ._borderBottomColor-color6._borderBottomColor-color6{border-bottom-color:var(--color6);}
1023
1026
  :root ._borderBottomColor-transparent._borderBottomColor-transparent{border-bottom-color:transparent;}
1024
1027
  :root ._borderBottomWidth-0px._borderBottomWidth-0px{border-bottom-width:0px;}
1025
1028
  :root ._borderBottomWidth-1px._borderBottomWidth-1px{border-bottom-width:1px;}
1026
1029
  :root:root:root ._borderLeftColor-0active-borderColor69916956._borderLeftColor-0active-borderColor69916956:active{border-left-color:var(--borderColorHover) !important;}
1027
1030
  :root:root:root ._borderLeftColor-0active-borderColor77378595._borderLeftColor-0active-borderColor77378595:active{border-left-color:var(--borderColorPress) !important;}
1028
1031
  :root:root:root:root ._borderLeftColor-0focus-borderColor68052152._borderLeftColor-0focus-borderColor68052152:focus{border-left-color:var(--borderColorFocus) !important;}
1032
+ :root:root:root:root ._borderLeftColor-0focus-color06._borderLeftColor-0focus-color06:focus{border-left-color:var(--color06) !important;}
1029
1033
  @media (hover) {:root:root ._borderLeftColor-0hover-borderColor69916956._borderLeftColor-0hover-borderColor69916956:hover{border-left-color:var(--borderColorHover) !important;}}
1034
+ @media (hover) {:root:root ._borderLeftColor-0hover-color6._borderLeftColor-0hover-color6:hover{border-left-color:var(--color6) !important;}}
1035
+ @media (hover) {:root:root ._borderLeftColor-0hover-color7._borderLeftColor-0hover-color7:hover{border-left-color:var(--color7) !important;}}
1030
1036
  :root ._borderLeftColor-backgroundF3405682._borderLeftColor-backgroundF3405682{border-left-color:var(--backgroundFocus);}
1031
1037
  :root ._borderLeftColor-borderColor._borderLeftColor-borderColor{border-left-color:var(--borderColor);}
1038
+ :root ._borderLeftColor-color6._borderLeftColor-color6{border-left-color:var(--color6);}
1032
1039
  :root ._borderLeftColor-transparent._borderLeftColor-transparent{border-left-color:transparent;}
1033
1040
  :root ._borderLeftWidth-0px._borderLeftWidth-0px{border-left-width:0px;}
1034
1041
  :root ._borderLeftWidth-1px._borderLeftWidth-1px{border-left-width:1px;}
1035
1042
  :root:root:root ._brc-0active-borderColor69916956._brc-0active-borderColor69916956:active{border-right-color:var(--borderColorHover) !important;}
1036
1043
  :root:root:root ._brc-0active-borderColor77378595._brc-0active-borderColor77378595:active{border-right-color:var(--borderColorPress) !important;}
1037
1044
  :root:root:root:root ._brc-0focus-borderColor68052152._brc-0focus-borderColor68052152:focus{border-right-color:var(--borderColorFocus) !important;}
1045
+ :root:root:root:root ._brc-0focus-color06._brc-0focus-color06:focus{border-right-color:var(--color06) !important;}
1038
1046
  @media (hover) {:root:root ._brc-0hover-borderColor69916956._brc-0hover-borderColor69916956:hover{border-right-color:var(--borderColorHover) !important;}}
1047
+ @media (hover) {:root:root ._brc-0hover-color6._brc-0hover-color6:hover{border-right-color:var(--color6) !important;}}
1048
+ @media (hover) {:root:root ._brc-0hover-color7._brc-0hover-color7:hover{border-right-color:var(--color7) !important;}}
1039
1049
  :root ._brc-backgroundF3405682._brc-backgroundF3405682{border-right-color:var(--backgroundFocus);}
1040
1050
  :root ._brc-borderColor._brc-borderColor{border-right-color:var(--borderColor);}
1051
+ :root ._brc-color6._brc-color6{border-right-color:var(--color6);}
1041
1052
  :root ._brc-transparent._brc-transparent{border-right-color:transparent;}
1042
1053
  :root ._brs-solid._brs-solid{border-right-style:solid;}
1043
1054
  :root ._brw-0px._brw-0px{border-right-width:0px;}
@@ -1045,9 +1056,13 @@
1045
1056
  :root:root:root ._btc-0active-borderColor69916956._btc-0active-borderColor69916956:active{border-top-color:var(--borderColorHover) !important;}
1046
1057
  :root:root:root ._btc-0active-borderColor77378595._btc-0active-borderColor77378595:active{border-top-color:var(--borderColorPress) !important;}
1047
1058
  :root:root:root:root ._btc-0focus-borderColor68052152._btc-0focus-borderColor68052152:focus{border-top-color:var(--borderColorFocus) !important;}
1059
+ :root:root:root:root ._btc-0focus-color06._btc-0focus-color06:focus{border-top-color:var(--color06) !important;}
1048
1060
  @media (hover) {:root:root ._btc-0hover-borderColor69916956._btc-0hover-borderColor69916956:hover{border-top-color:var(--borderColorHover) !important;}}
1061
+ @media (hover) {:root:root ._btc-0hover-color6._btc-0hover-color6:hover{border-top-color:var(--color6) !important;}}
1062
+ @media (hover) {:root:root ._btc-0hover-color7._btc-0hover-color7:hover{border-top-color:var(--color7) !important;}}
1049
1063
  :root ._btc-backgroundF3405682._btc-backgroundF3405682{border-top-color:var(--backgroundFocus);}
1050
1064
  :root ._btc-borderColor._btc-borderColor{border-top-color:var(--borderColor);}
1065
+ :root ._btc-color6._btc-color6{border-top-color:var(--color6);}
1051
1066
  :root ._btc-transparent._btc-transparent{border-top-color:transparent;}
1052
1067
  :root ._btlr-100000px{border-top-left-radius:100000px;}
1053
1068
  :root ._btlr-1000px{border-top-left-radius:1000px;}
@@ -1166,8 +1181,10 @@
1166
1181
  @media (hover) {:root:root ._o-0hover-0--9:hover{opacity:0.9 !important;}}
1167
1182
  :root ._o-1{opacity:1;}
1168
1183
  :root:root:root:root ._outlineColor-0focus-visible-outlineColo114._outlineColor-0focus-visible-outlineColo114:focus-visible{outline-color:var(--outlineColor) !important;}
1184
+ :root:root:root:root ._outlineStyle-0focus-visible-none._outlineStyle-0focus-visible-none:focus-visible{outline-style:none !important;}
1169
1185
  :root:root:root:root ._outlineStyle-0focus-visible-solid._outlineStyle-0focus-visible-solid:focus-visible{outline-style:solid !important;}
1170
1186
  :root ._outlineStyle-none._outlineStyle-none{outline-style:none;}
1187
+ :root:root:root:root ._outlineWidth-0focus-visible-0px._outlineWidth-0focus-visible-0px:focus-visible{outline-width:0px !important;}
1171
1188
  :root:root:root:root ._outlineWidth-0focus-visible-2px._outlineWidth-0focus-visible-2px:focus-visible{outline-width:2px !important;}
1172
1189
  :root ._outlineWidth-0px._outlineWidth-0px{outline-width:0px;}
1173
1190
  :root ._ox-hidden{overflow-x:hidden;}
package/dist/theme.css CHANGED
@@ -9,18 +9,14 @@
9
9
  * transparent). Values originate in `@hanzo/tokens` (dark/light theme sets) —
10
10
  * the same source `@hanzo/ui/tokens` exposes to code — so CSS and runtime agree.
11
11
  *
12
- * Dark-first Hanzo identity: neutral zinc-on-black, calm, high-contrast. `:root`
13
- * IS the dark look the file said "dark-first" while shipping light at `:root`,
14
- * so an app that mounted <Hanzo> (dark by default) and read `--background` in its
15
- * own CSS got white. `.light` retunes. Both themes also answer to gui's own
16
- * `.t_light` / `.t_dark`, which <Hanzo> stamps on the body, so the CSS custom
17
- * properties and the component tokens name one theme and never disagree.
18
- * Typography is Geist Sans (UI/body) + Geist Mono (code) — bound
12
+ * Dark-first Hanzo identity: neutral zinc-on-black, calm, high-contrast. Add
13
+ * `class="dark"` on <html> for the canonical dark look; `:root` is the light
14
+ * counterpart. Typography is Geist Sans (UI/body) + Geist Mono (code) bound
19
15
  * through `--font-geist-sans` / `--font-geist-mono`; a host that loads Geist
20
16
  * (next/font, @fontsource, CDN) binds those variables and everything inherits
21
17
  * it. No Inter, no system-stack default anywhere.
22
18
  *
23
- * Plain CSS, nothing else: `:root` / `.light` custom properties plus the base font
19
+ * Plain CSS, nothing else: `:root`/`.dark` custom properties plus the base font
24
20
  * and the touch/elevation rules the components name. The Tailwind v4 `@theme
25
21
  * inline` block that used to map these onto utilities is gone with Tailwind.
26
22
  */
@@ -34,13 +30,22 @@
34
30
  --font-geist-mono: var(--font-geist-mono-provided, 'Geist Mono');
35
31
  }
36
32
 
37
- /* Dark-first Hanzo identity neutral zinc-on-black.
38
- Borders are HAIRLINES: 10% white, never a solid chalk line on black. */
39
- :root,
40
- .dark,
41
- .t_dark {
42
- --radius: 0.5rem;
33
+ /* Light identity (the counterpart to dark-first). */
34
+ /* DARK IS THE DEFAULT, and it is the default HERE, not only in a consumer that
35
+ remembers to say so.
43
36
 
37
+ `:root` used to hold the light palette with dark behind `.dark`, so an app
38
+ that imported this file and did not put class="dark" on <html> rendered pure
39
+ white — oklch(1 0 0) — and every surface built that way came out bright white
40
+ by accident. It is also the opposite of @hanzo/design, whose `:root` is dark
41
+ with `.light` to opt out, so mixing the two inverted an app's theme depending
42
+ on which file won.
43
+
44
+ One convention now, matching the design system: `:root` is dark, `.light`
45
+ opts out. `.dark` is kept so an app that already states it is unaffected, and
46
+ `.light` follows both so it can still win. */
47
+ :root,
48
+ .dark {
44
49
  --background: oklch(0.145 0 0);
45
50
  --foreground: oklch(0.985 0 0);
46
51
  --card: oklch(0.205 0 0);
@@ -76,10 +81,9 @@
76
81
  --sidebar-ring: oklch(0.439 0 0);
77
82
  }
78
83
 
79
- /* Light — the counterpart. Ordered before `.dark` so an explicit `.dark` inside
80
- a light subtree still wins the specificity tie. */
81
- .light,
82
- .t_light {
84
+ .light {
85
+ --radius: 0.5rem;
86
+
83
87
  --background: oklch(1 0 0);
84
88
  --foreground: oklch(0.145 0 0);
85
89
  --card: oklch(1 0 0);
@@ -115,27 +119,7 @@
115
119
  --sidebar-ring: oklch(0.708 0 0);
116
120
  }
117
121
 
118
- /* ── The UA reset ─────────────────────────────────────────────────────────────
119
- gui renders REAL <button>, <input> and <textarea> elements, and the browser
120
- has opinions about those: a button is #efefef with a 2px OUTSET border. gui
121
- compiles style props to border-WIDTH and border-COLOR and never emits
122
- border-STYLE, so the UA's `outset` survived every one of them — which is why
123
- a Collapsible trigger rendered as a white bar across a dark page and a Switch
124
- wore a 2px black ring. A <div> was never affected (its border-style starts at
125
- `none`), so this only ever showed on the components that are really buttons.
126
-
127
- `:where()` carries ZERO specificity, so every gui atomic class still wins;
128
- `border: 0 solid transparent` leaves the STYLE resolved so that a component
129
- setting only a width and a colour actually draws its line. */
130
- :where(button, input, textarea) {
131
- appearance: none;
132
- background-color: transparent;
133
- border: 0 solid transparent;
134
- color: inherit;
135
- font: inherit;
136
- margin: 0;
137
- padding: 0;
138
- }
122
+ /* Dark-first Hanzo identity neutral zinc-on-black. */
139
123
 
140
124
  /* Geist by default — UI/body inherits Geist Sans; code/mono surfaces get Geist
141
125
  Mono. Components never hard-code a family; they inherit this or bind
@@ -214,3 +198,15 @@
214
198
  .elevation-2 { box-shadow: var(--hz-elevation-2, 0 4px 12px rgba(0, 0, 0, 0.24)); }
215
199
  .elevation-3 { box-shadow: var(--hz-elevation-3, 0 8px 24px rgba(0, 0, 0, 0.36)); }
216
200
  .elevation-4 { box-shadow: var(--hz-elevation-4, 0 16px 48px rgba(0, 0, 0, 0.44)); }
201
+
202
+ /* Glass — the ONE frosted material (see backends/gui/glass.tsx). The component
203
+ stands as a solid raised panel; only a browser that can actually blur the
204
+ backdrop trades it for the translucent material, so content never sits on
205
+ see-through ground without the blur. !important beats the compiled bg atom. */
206
+ @supports (backdrop-filter: blur(8px)) {
207
+ [data-slot="glass"] {
208
+ background-color: color-mix(in oklab, var(--background) 72%, transparent) !important;
209
+ -webkit-backdrop-filter: blur(20px) saturate(1.8);
210
+ backdrop-filter: blur(20px) saturate(1.8);
211
+ }
212
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.0.42",
3
+ "version": "8.0.44",
4
4
  "type": "module",
5
5
  "description": "Hanzo UI — the one canonical Hanzo component library, on @hanzo/gui + @hanzo/tokens. 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": {
@@ -227,7 +227,7 @@
227
227
  "publishConfig": {
228
228
  "access": "public"
229
229
  },
230
- "license": "BSD-3-Clause",
230
+ "license": "MIT",
231
231
  "author": "Hanzo AI <dev@hanzo.ai>",
232
232
  "scripts": {
233
233
  "build": "rm -rf dist dist-cjs && tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json --noCheck && mkdir -p dist/styles && cp src/theme.css dist/theme.css && cp src/styles/motion.css dist/styles/motion.css && node scripts/postbuild.mjs && node scripts/gen-css.mjs",