@hanzo/ui 8.4.4 → 8.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/box.cjs +23 -3
- package/dist/box.d.ts +18 -0
- package/dist/box.d.ts.map +1 -1
- package/dist/box.js +24 -4
- package/dist/box.js.map +1 -1
- package/dist/gallery.html +1 -1
- package/package.json +1 -1
package/dist/box.cjs
CHANGED
|
@@ -21,6 +21,20 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
21
21
|
* 77 of 225 elements on one page into flex containers that were never asked to
|
|
22
22
|
* be: an inline run became a column, a heading's width collapsed to its text,
|
|
23
23
|
* and a page grew 8% taller.
|
|
24
|
+
*
|
|
25
|
+
* `tag` renders the element Box is standing in for, and it is what makes the
|
|
26
|
+
* migration reach past `<div>`. Divs are about a third of what carries a
|
|
27
|
+
* className in these apps; the rest are `p`, `span`, `li`, `h2`, `section`, `a`.
|
|
28
|
+
* Converting those to a div-only Box would read as a rename and would in fact
|
|
29
|
+
* strip the document of its headings, lists and paragraphs — every one of them a
|
|
30
|
+
* thing a screen reader navigates by.
|
|
31
|
+
*
|
|
32
|
+
* It goes through `asChild` because gui does NOT honour a `tag` prop: asked for
|
|
33
|
+
* one it renders its own element anyway AND passes `tag` through to the DOM,
|
|
34
|
+
* where it is an invalid attribute. `asChild` is the supported way to say "style
|
|
35
|
+
* this element instead of yours", so the semantics come from the element and the
|
|
36
|
+
* styling still comes from gui — one substrate, not a second styling path for
|
|
37
|
+
* everything that is not a div.
|
|
24
38
|
*/
|
|
25
39
|
const react_1 = require("react");
|
|
26
40
|
const gui_1 = require("@hanzo/gui");
|
|
@@ -29,7 +43,7 @@ const tw_1 = require("./tw.cjs");
|
|
|
29
43
|
const TEXT_PROPS = ['fontSize', 'lineHeight', 'fontWeight', 'letterSpacing',
|
|
30
44
|
'textTransform', 'fontFamily', 'fontStyle', 'textAlign', 'color',
|
|
31
45
|
'textDecorationLine', 'whiteSpace'];
|
|
32
|
-
exports.Box = (0, react_1.forwardRef)(function Box({ className, children, 'aria-hidden': hidden, ...rest }, ref) {
|
|
46
|
+
exports.Box = (0, react_1.forwardRef)(function Box({ className, children, 'aria-hidden': hidden, tag, ...rest }, ref) {
|
|
33
47
|
const { props, rest: unread } = (0, tw_1.tw)(className);
|
|
34
48
|
// A View pins `min-height: 0`; a div's is `auto`, and auto is what gives a
|
|
35
49
|
// flex or grid child its automatic minimum size. Pinned, a converted child of
|
|
@@ -52,15 +66,21 @@ exports.Box = (0, react_1.forwardRef)(function Box({ className, children, 'aria-
|
|
|
52
66
|
// class said otherwise, so `leading-relaxed` still wins.
|
|
53
67
|
if (!('lineHeight' in text))
|
|
54
68
|
text.lineHeight = 'inherit';
|
|
69
|
+
const style = Object.keys(text).length
|
|
70
|
+
? { ...text, ...rest.style }
|
|
71
|
+
: rest.style;
|
|
55
72
|
// Explicit props win: a caller who states a value directly means it, and the
|
|
56
73
|
// classes are what they are migrating away from.
|
|
57
|
-
|
|
74
|
+
const frame = ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ref: tag ? undefined : ref, asChild: tag ? true : undefined, display: "block",
|
|
58
75
|
// A View does not shrink; a div does. Left at the View's default, every
|
|
59
76
|
// converted flex child held its full basis and overflowed its row instead
|
|
60
77
|
// of sharing it — two half-width columns came out 608px each in a 1216px
|
|
61
78
|
// row with a 32px gap, where the divs they replaced sat at 592.
|
|
62
79
|
// `shrink`, not `flexShrink`: gui types the shorthand and compiles both to
|
|
63
80
|
// the same `_shrink-1`, and the DOM spelling is the one it does not carry.
|
|
64
|
-
shrink: 1, "aria-hidden": hidden === undefined ? undefined : hidden !== 'false' && hidden !== false, ...props, ...rest, className: unread || undefined, style:
|
|
81
|
+
shrink: 1, "aria-hidden": hidden === undefined ? undefined : hidden !== 'false' && hidden !== false, ...props, ...rest, className: tag ? undefined : unread || undefined, style: tag ? undefined : style, children: tag
|
|
82
|
+
? (0, react_1.createElement)(tag, { ref, className: unread || undefined, style }, children)
|
|
83
|
+
: children }));
|
|
84
|
+
return frame;
|
|
65
85
|
});
|
|
66
86
|
exports.default = exports.Box;
|
package/dist/box.d.ts
CHANGED
|
@@ -16,6 +16,20 @@
|
|
|
16
16
|
* 77 of 225 elements on one page into flex containers that were never asked to
|
|
17
17
|
* be: an inline run became a column, a heading's width collapsed to its text,
|
|
18
18
|
* and a page grew 8% taller.
|
|
19
|
+
*
|
|
20
|
+
* `tag` renders the element Box is standing in for, and it is what makes the
|
|
21
|
+
* migration reach past `<div>`. Divs are about a third of what carries a
|
|
22
|
+
* className in these apps; the rest are `p`, `span`, `li`, `h2`, `section`, `a`.
|
|
23
|
+
* Converting those to a div-only Box would read as a rename and would in fact
|
|
24
|
+
* strip the document of its headings, lists and paragraphs — every one of them a
|
|
25
|
+
* thing a screen reader navigates by.
|
|
26
|
+
*
|
|
27
|
+
* It goes through `asChild` because gui does NOT honour a `tag` prop: asked for
|
|
28
|
+
* one it renders its own element anyway AND passes `tag` through to the DOM,
|
|
29
|
+
* where it is an invalid attribute. `asChild` is the supported way to say "style
|
|
30
|
+
* this element instead of yours", so the semantics come from the element and the
|
|
31
|
+
* styling still comes from gui — one substrate, not a second styling path for
|
|
32
|
+
* everything that is not a div.
|
|
19
33
|
*/
|
|
20
34
|
import { type ReactNode } from 'react';
|
|
21
35
|
import { YStack } from '@hanzo/gui';
|
|
@@ -23,6 +37,10 @@ import { type ClassValue } from './tw.js';
|
|
|
23
37
|
export type BoxProps = Omit<React.ComponentProps<typeof YStack>, 'aria-hidden'> & {
|
|
24
38
|
className?: ClassValue;
|
|
25
39
|
children?: ReactNode;
|
|
40
|
+
/**
|
|
41
|
+
* The element to render. Omitted, Box is the `<div>` it has always been.
|
|
42
|
+
*/
|
|
43
|
+
tag?: keyof React.JSX.IntrinsicElements;
|
|
26
44
|
/**
|
|
27
45
|
* ARIA states are strings in markup and gui types this one as a boolean, so
|
|
28
46
|
* both spellings are taken and normalised. Rejecting `"true"` would make a
|
package/dist/box.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../src/box.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../src/box.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAM,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAO1C,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG;IAChF,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAA;IACvC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;CAC3C,CAAA;AAED,eAAO,MAAM,GAAG,uGAqDd,CAAA;eAEa,GAAG"}
|
package/dist/box.js
CHANGED
|
@@ -18,15 +18,29 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
18
18
|
* 77 of 225 elements on one page into flex containers that were never asked to
|
|
19
19
|
* be: an inline run became a column, a heading's width collapsed to its text,
|
|
20
20
|
* and a page grew 8% taller.
|
|
21
|
+
*
|
|
22
|
+
* `tag` renders the element Box is standing in for, and it is what makes the
|
|
23
|
+
* migration reach past `<div>`. Divs are about a third of what carries a
|
|
24
|
+
* className in these apps; the rest are `p`, `span`, `li`, `h2`, `section`, `a`.
|
|
25
|
+
* Converting those to a div-only Box would read as a rename and would in fact
|
|
26
|
+
* strip the document of its headings, lists and paragraphs — every one of them a
|
|
27
|
+
* thing a screen reader navigates by.
|
|
28
|
+
*
|
|
29
|
+
* It goes through `asChild` because gui does NOT honour a `tag` prop: asked for
|
|
30
|
+
* one it renders its own element anyway AND passes `tag` through to the DOM,
|
|
31
|
+
* where it is an invalid attribute. `asChild` is the supported way to say "style
|
|
32
|
+
* this element instead of yours", so the semantics come from the element and the
|
|
33
|
+
* styling still comes from gui — one substrate, not a second styling path for
|
|
34
|
+
* everything that is not a div.
|
|
21
35
|
*/
|
|
22
|
-
import { forwardRef } from 'react';
|
|
36
|
+
import { createElement, forwardRef } from 'react';
|
|
23
37
|
import { YStack } from '@hanzo/gui';
|
|
24
38
|
import { tw } from './tw.js';
|
|
25
39
|
/** Properties a frame ignores and a DOM element passes to its children. */
|
|
26
40
|
const TEXT_PROPS = ['fontSize', 'lineHeight', 'fontWeight', 'letterSpacing',
|
|
27
41
|
'textTransform', 'fontFamily', 'fontStyle', 'textAlign', 'color',
|
|
28
42
|
'textDecorationLine', 'whiteSpace'];
|
|
29
|
-
export const Box = forwardRef(function Box({ className, children, 'aria-hidden': hidden, ...rest }, ref) {
|
|
43
|
+
export const Box = forwardRef(function Box({ className, children, 'aria-hidden': hidden, tag, ...rest }, ref) {
|
|
30
44
|
const { props, rest: unread } = tw(className);
|
|
31
45
|
// A View pins `min-height: 0`; a div's is `auto`, and auto is what gives a
|
|
32
46
|
// flex or grid child its automatic minimum size. Pinned, a converted child of
|
|
@@ -49,16 +63,22 @@ export const Box = forwardRef(function Box({ className, children, 'aria-hidden':
|
|
|
49
63
|
// class said otherwise, so `leading-relaxed` still wins.
|
|
50
64
|
if (!('lineHeight' in text))
|
|
51
65
|
text.lineHeight = 'inherit';
|
|
66
|
+
const style = Object.keys(text).length
|
|
67
|
+
? { ...text, ...rest.style }
|
|
68
|
+
: rest.style;
|
|
52
69
|
// Explicit props win: a caller who states a value directly means it, and the
|
|
53
70
|
// classes are what they are migrating away from.
|
|
54
|
-
|
|
71
|
+
const frame = (_jsx(YStack, { ref: tag ? undefined : ref, asChild: tag ? true : undefined, display: "block",
|
|
55
72
|
// A View does not shrink; a div does. Left at the View's default, every
|
|
56
73
|
// converted flex child held its full basis and overflowed its row instead
|
|
57
74
|
// of sharing it — two half-width columns came out 608px each in a 1216px
|
|
58
75
|
// row with a 32px gap, where the divs they replaced sat at 592.
|
|
59
76
|
// `shrink`, not `flexShrink`: gui types the shorthand and compiles both to
|
|
60
77
|
// the same `_shrink-1`, and the DOM spelling is the one it does not carry.
|
|
61
|
-
shrink: 1, "aria-hidden": hidden === undefined ? undefined : hidden !== 'false' && hidden !== false, ...props, ...rest, className: unread || undefined, style:
|
|
78
|
+
shrink: 1, "aria-hidden": hidden === undefined ? undefined : hidden !== 'false' && hidden !== false, ...props, ...rest, className: tag ? undefined : unread || undefined, style: tag ? undefined : style, children: tag
|
|
79
|
+
? createElement(tag, { ref, className: unread || undefined, style }, children)
|
|
80
|
+
: children }));
|
|
81
|
+
return frame;
|
|
62
82
|
});
|
|
63
83
|
export default Box;
|
|
64
84
|
//# sourceMappingURL=box.js.map
|
package/dist/box.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.js","sourceRoot":"","sources":["../src/box.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"box.js","sourceRoot":"","sources":["../src/box.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,EAAE,EAAmB,MAAM,MAAM,CAAA;AAE1C,2EAA2E;AAC3E,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe;IACzE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAChE,oBAAoB,EAAE,YAAY,CAAU,CAAA;AAiB9C,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,CAAgB,SAAS,GAAG,CACvD,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAC5D,GAAG;IAEH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC7C,2EAA2E;IAC3E,8EAA8E;IAC9E,oEAAoE;IACpE,IAAI,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;QAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;IACrD,6EAA6E;IAC7E,0EAA0E;IAC1E,8EAA8E;IAC9E,0EAA0E;IAC1E,yBAAyB;IACzB,MAAM,IAAI,GAA4B,EAAE,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;IACnF,6EAA6E;IAC7E,0EAA0E;IAC1E,yDAAyD;IACzD,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC;QAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;QACpC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAI,IAAY,CAAC,KAAK,EAAE;QACrC,CAAC,CAAE,IAAY,CAAC,KAAK,CAAA;IACvB,6EAA6E;IAC7E,iDAAiD;IACjD,MAAM,KAAK,GAAG,CACZ,KAAC,MAAM,IACL,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAC1B,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC/B,OAAO,EAAC,OAAO;QACf,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,gEAAgE;QAChE,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,EAAE,CAAC,iBACI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,KACjF,KAAgB,KACjB,IAAI,EACR,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,EAChD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,YAK7B,GAAG;YACF,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC;YAC9E,CAAC,CAAC,QAAQ,GACL,CACV,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA;AAEF,eAAe,GAAG,CAAA"}
|
package/dist/gallery.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.4.
|
|
1
|
+
<!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.4.5</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
|
|
2
2
|
:root { --hanzo-ui-styles: 1; }
|
|
3
3
|
/* Hanzo Design System — the entry point. Import THIS one file.
|
|
4
4
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzo/ui",
|
|
3
|
-
"version": "8.4.
|
|
3
|
+
"version": "8.4.5",
|
|
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": {
|