@hanzo/ui 8.27.31 → 8.27.32

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,76 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ConsentLink = exports.Consent = exports.openConsent = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Consent — the one cookie banner every Hanzo, Lux and Zoo site mounts.
8
+ *
9
+ * It draws the choice; @hanzo/event stores it (`hz_consent`) and the tag
10
+ * manager reacts: nothing from an ad platform loads before Accept, and Google
11
+ * Consent Mode v2 starts denied.
12
+ *
13
+ * - opt-in zones (EU, UK, CH, anywhere that is not a US zone): a banner with
14
+ * Accept all, Reject all and Choose, until the visitor has chosen.
15
+ * - US: no banner; `ConsentLink` ("Do not sell or share my personal
16
+ * information") in the footer opens the same choices.
17
+ * - Global Privacy Control: marketing and ads are off and their switches are
18
+ * locked, in every zone.
19
+ *
20
+ * `Consent` mounts once near the root; `ConsentLink` goes wherever a footer
21
+ * link goes and opens the panel from anywhere.
22
+ */
23
+ const gui_1 = require("@hanzo/gui");
24
+ const event_1 = require("@hanzo/event");
25
+ const react_1 = require("react");
26
+ const button_1 = require("../backends/gui/button.cjs");
27
+ const switch_1 = require("../backends/gui/switch.cjs");
28
+ const slot_1 = require("../backends/gui/slot.cjs");
29
+ const OPEN = 'hzconsent-open';
30
+ /** Opens the choices from anywhere. */
31
+ const openConsent = () => {
32
+ if (typeof window !== 'undefined')
33
+ window.dispatchEvent(new Event(OPEN));
34
+ };
35
+ exports.openConsent = openConsent;
36
+ const KINDS = [
37
+ { key: 'analytics', title: 'Analytics', body: 'Counts visits and finds what is broken, so Hanzo can get better.' },
38
+ { key: 'marketing', title: 'Marketing', body: 'Lets ad platforms measure the sign-ups and orders their ads led to.' },
39
+ { key: 'ads', title: 'Personalized ads', body: 'Lets those platforms use your visit to show you ads elsewhere.' },
40
+ ];
41
+ const Consent = ({ privacy = 'https://hanzo.ai/privacy' }) => {
42
+ const [shown, setShown] = (0, react_1.useState)(false);
43
+ const [choosing, setChoosing] = (0, react_1.useState)(false);
44
+ const [draft, setDraft] = (0, react_1.useState)({ analytics: false, marketing: false, ads: false });
45
+ const locked = typeof window !== 'undefined' && (0, event_1.gpc)();
46
+ (0, react_1.useEffect)(() => {
47
+ setShown((0, event_1.asks)());
48
+ const open = () => {
49
+ setDraft((0, event_1.readConsent)());
50
+ setChoosing(true);
51
+ setShown(true);
52
+ };
53
+ window.addEventListener(OPEN, open);
54
+ return () => window.removeEventListener(OPEN, open);
55
+ }, []);
56
+ if (!shown)
57
+ return null;
58
+ const done = (fn) => () => {
59
+ fn();
60
+ setShown(false);
61
+ setChoosing(false);
62
+ };
63
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('consent'), role: "dialog", "aria-label": "Cookie preferences", position: "fixed", b: 16, l: 16, r: 16, z: 2147483000, maxW: 560, gap: "$3", p: "$4", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", shadowColor: "rgba(0,0,0,0.25)", shadowRadius: 24, shadowOffset: { width: 0, height: 8 }, children: [(0, jsx_runtime_1.jsxs)(gui_1.Paragraph, { size: "$3", color: "$ink", m: 0, children: [choosing
64
+ ? 'Choose what Hanzo may measure and share. You can change this at any time.'
65
+ : 'Hanzo uses cookies to count visits and to measure its ads. Nothing from an advertiser loads until you accept.', ' ', (0, jsx_runtime_1.jsx)("a", { href: privacy, style: { color: 'inherit', textDecoration: 'underline' }, children: "Privacy policy" })] }), choosing ? ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$3", children: [locked ? ((0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$2", color: "$soft", m: 0, children: "Your browser sends Global Privacy Control, so marketing and personalized ads stay off." })) : null, KINDS.map((k) => {
66
+ const off = locked && k.key !== 'analytics';
67
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", items: "center", justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, children: [(0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$3", color: "$ink", fontWeight: "500", m: 0, children: k.title }), (0, jsx_runtime_1.jsx)(gui_1.Paragraph, { size: "$2", color: "$soft", m: 0, children: k.body })] }), (0, jsx_runtime_1.jsx)(switch_1.Switch, { "aria-label": k.title, disabled: off, checked: off ? false : draft[k.key], onCheckedChange: (v) => setDraft({ ...draft, [k.key]: v === true }) })] }, k.key));
68
+ }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", justify: "flex-end", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "secondary", onClick: done(event_1.rejectAll), children: "Reject all" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", onClick: done(() => (0, event_1.saveConsent)(draft)), children: "Save choices" })] })] })) : ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { gap: "$3", flexWrap: "wrap", justify: "flex-end", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "link", onClick: () => {
69
+ setDraft((0, event_1.readConsent)());
70
+ setChoosing(true);
71
+ }, children: "Choose" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "secondary", onClick: done(event_1.rejectAll), children: "Reject all" }), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", onClick: done(event_1.acceptAll), children: "Accept all" })] }))] }));
72
+ };
73
+ exports.Consent = Consent;
74
+ /** The footer link that reopens the choices. In the US it reads as the opt-out the law names. */
75
+ const ConsentLink = ({ label = 'Do not sell or share my personal information' }) => ((0, jsx_runtime_1.jsx)(button_1.Button, { ...(0, slot_1.slot)('consent-link'), type: "button", variant: "link", size: "sm", px: 0, minH: 0, onClick: exports.openConsent, children: label }));
76
+ exports.ConsentLink = ConsentLink;
@@ -0,0 +1,13 @@
1
+ /** Opens the choices from anywhere. */
2
+ export declare const openConsent: () => void;
3
+ export type ConsentProps = {
4
+ /** Where the privacy policy lives. */
5
+ privacy?: string;
6
+ };
7
+ declare const Consent: ({ privacy }: ConsentProps) => import("react").JSX.Element | null;
8
+ /** The footer link that reopens the choices. In the US it reads as the opt-out the law names. */
9
+ declare const ConsentLink: ({ label }: {
10
+ label?: string;
11
+ }) => import("react").JSX.Element;
12
+ export { Consent, ConsentLink };
13
+ //# sourceMappingURL=Consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Consent.d.ts","sourceRoot":"","sources":["../../src/consent/Consent.tsx"],"names":[],"mappings":"AA6BA,uCAAuC;AACvC,eAAO,MAAM,WAAW,QAAO,IAE9B,CAAA;AAQD,MAAM,MAAM,YAAY,GAAG;IACzB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,QAAA,MAAM,OAAO,gBAA8C,YAAY,uCAiHtE,CAAA;AAED,iGAAiG;AACjG,QAAA,MAAM,WAAW,cAAgE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,gCAIlG,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,72 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Consent — the one cookie banner every Hanzo, Lux and Zoo site mounts.
5
+ *
6
+ * It draws the choice; @hanzo/event stores it (`hz_consent`) and the tag
7
+ * manager reacts: nothing from an ad platform loads before Accept, and Google
8
+ * Consent Mode v2 starts denied.
9
+ *
10
+ * - opt-in zones (EU, UK, CH, anywhere that is not a US zone): a banner with
11
+ * Accept all, Reject all and Choose, until the visitor has chosen.
12
+ * - US: no banner; `ConsentLink` ("Do not sell or share my personal
13
+ * information") in the footer opens the same choices.
14
+ * - Global Privacy Control: marketing and ads are off and their switches are
15
+ * locked, in every zone.
16
+ *
17
+ * `Consent` mounts once near the root; `ConsentLink` goes wherever a footer
18
+ * link goes and opens the panel from anywhere.
19
+ */
20
+ import { Paragraph, XStack, YStack } from '@hanzo/gui';
21
+ import { acceptAll, asks, gpc, readConsent, rejectAll, saveConsent } from '@hanzo/event';
22
+ import { useEffect, useState } from 'react';
23
+ import { Button } from '../backends/gui/button.js';
24
+ import { Switch } from '../backends/gui/switch.js';
25
+ import { slot } from '../backends/gui/slot.js';
26
+ const OPEN = 'hzconsent-open';
27
+ /** Opens the choices from anywhere. */
28
+ export const openConsent = () => {
29
+ if (typeof window !== 'undefined')
30
+ window.dispatchEvent(new Event(OPEN));
31
+ };
32
+ const KINDS = [
33
+ { key: 'analytics', title: 'Analytics', body: 'Counts visits and finds what is broken, so Hanzo can get better.' },
34
+ { key: 'marketing', title: 'Marketing', body: 'Lets ad platforms measure the sign-ups and orders their ads led to.' },
35
+ { key: 'ads', title: 'Personalized ads', body: 'Lets those platforms use your visit to show you ads elsewhere.' },
36
+ ];
37
+ const Consent = ({ privacy = 'https://hanzo.ai/privacy' }) => {
38
+ const [shown, setShown] = useState(false);
39
+ const [choosing, setChoosing] = useState(false);
40
+ const [draft, setDraft] = useState({ analytics: false, marketing: false, ads: false });
41
+ const locked = typeof window !== 'undefined' && gpc();
42
+ useEffect(() => {
43
+ setShown(asks());
44
+ const open = () => {
45
+ setDraft(readConsent());
46
+ setChoosing(true);
47
+ setShown(true);
48
+ };
49
+ window.addEventListener(OPEN, open);
50
+ return () => window.removeEventListener(OPEN, open);
51
+ }, []);
52
+ if (!shown)
53
+ return null;
54
+ const done = (fn) => () => {
55
+ fn();
56
+ setShown(false);
57
+ setChoosing(false);
58
+ };
59
+ return (_jsxs(YStack, { ...slot('consent'), role: "dialog", "aria-label": "Cookie preferences", position: "fixed", b: 16, l: 16, r: 16, z: 2147483000, maxW: 560, gap: "$3", p: "$4", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", shadowColor: "rgba(0,0,0,0.25)", shadowRadius: 24, shadowOffset: { width: 0, height: 8 }, children: [_jsxs(Paragraph, { size: "$3", color: "$ink", m: 0, children: [choosing
60
+ ? 'Choose what Hanzo may measure and share. You can change this at any time.'
61
+ : 'Hanzo uses cookies to count visits and to measure its ads. Nothing from an advertiser loads until you accept.', ' ', _jsx("a", { href: privacy, style: { color: 'inherit', textDecoration: 'underline' }, children: "Privacy policy" })] }), choosing ? (_jsxs(YStack, { gap: "$3", children: [locked ? (_jsx(Paragraph, { size: "$2", color: "$soft", m: 0, children: "Your browser sends Global Privacy Control, so marketing and personalized ads stay off." })) : null, KINDS.map((k) => {
62
+ const off = locked && k.key !== 'analytics';
63
+ return (_jsxs(XStack, { gap: "$3", items: "center", justify: "space-between", children: [_jsxs(YStack, { flex: 1, children: [_jsx(Paragraph, { size: "$3", color: "$ink", fontWeight: "500", m: 0, children: k.title }), _jsx(Paragraph, { size: "$2", color: "$soft", m: 0, children: k.body })] }), _jsx(Switch, { "aria-label": k.title, disabled: off, checked: off ? false : draft[k.key], onCheckedChange: (v) => setDraft({ ...draft, [k.key]: v === true }) })] }, k.key));
64
+ }), _jsxs(XStack, { gap: "$3", justify: "flex-end", children: [_jsx(Button, { type: "button", variant: "secondary", onClick: done(rejectAll), children: "Reject all" }), _jsx(Button, { type: "button", onClick: done(() => saveConsent(draft)), children: "Save choices" })] })] })) : (_jsxs(XStack, { gap: "$3", flexWrap: "wrap", justify: "flex-end", children: [_jsx(Button, { type: "button", variant: "link", onClick: () => {
65
+ setDraft(readConsent());
66
+ setChoosing(true);
67
+ }, children: "Choose" }), _jsx(Button, { type: "button", variant: "secondary", onClick: done(rejectAll), children: "Reject all" }), _jsx(Button, { type: "button", onClick: done(acceptAll), children: "Accept all" })] }))] }));
68
+ };
69
+ /** The footer link that reopens the choices. In the US it reads as the opt-out the law names. */
70
+ const ConsentLink = ({ label = 'Do not sell or share my personal information' }) => (_jsx(Button, { ...slot('consent-link'), type: "button", variant: "link", size: "sm", px: 0, minH: 0, onClick: openConsent, children: label }));
71
+ export { Consent, ConsentLink };
72
+ //# sourceMappingURL=Consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Consent.js","sourceRoot":"","sources":["../../src/consent/Consent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openConsent = exports.ConsentLink = exports.Consent = void 0;
4
+ var Consent_1 = require("./Consent.cjs");
5
+ Object.defineProperty(exports, "Consent", { enumerable: true, get: function () { return Consent_1.Consent; } });
6
+ Object.defineProperty(exports, "ConsentLink", { enumerable: true, get: function () { return Consent_1.ConsentLink; } });
7
+ Object.defineProperty(exports, "openConsent", { enumerable: true, get: function () { return Consent_1.openConsent; } });
@@ -0,0 +1,2 @@
1
+ export { Consent, ConsentLink, openConsent, type ConsentProps } from './Consent.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/consent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { Consent, ConsentLink, openConsent } from './Consent.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/consent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAqB,MAAM,WAAW,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.27.31</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
1
+ <!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.27.32</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.27.31",
3
+ "version": "8.27.32",
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": {
@@ -110,6 +110,12 @@
110
110
  "require": "./dist/auth/index.cjs",
111
111
  "default": "./dist/auth/index.js"
112
112
  },
113
+ "./consent": {
114
+ "types": "./dist/consent/index.d.ts",
115
+ "import": "./dist/consent/index.js",
116
+ "require": "./dist/consent/index.cjs",
117
+ "default": "./dist/consent/index.js"
118
+ },
113
119
  "./marketing": {
114
120
  "types": "./dist/marketing/index.d.ts",
115
121
  "import": "./dist/marketing/index.js",
@@ -311,6 +317,7 @@
311
317
  "@hanzo/canvas": ">=0.2.3",
312
318
  "@hanzo/cd": ">=0.1.2",
313
319
  "@hanzo/dashboard": ">=0.2.0",
320
+ "@hanzo/event": ">=0.3.48",
314
321
  "@hanzo/data": ">=1.2.4",
315
322
  "@hanzo/gui": "^8.3.5",
316
323
  "@hanzo/iam": ">=0.21.21",
@@ -349,6 +356,9 @@
349
356
  "@hanzo/cd": {
350
357
  "optional": true
351
358
  },
359
+ "@hanzo/event": {
360
+ "optional": true
361
+ },
352
362
  "@hanzo/usage": {
353
363
  "optional": true
354
364
  },
@@ -367,6 +377,7 @@
367
377
  },
368
378
  "devDependencies": {
369
379
  "@hanzo/cd": "0.1.2",
380
+ "@hanzo/event": "0.3.48",
370
381
  "@hanzo/dashboard": "0.2.0",
371
382
  "@hanzo/data": "1.2.4",
372
383
  "@hanzo/gui": "8.3.5",