@hanzo/ui 8.0.58 → 8.0.60

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/README.md CHANGED
@@ -114,6 +114,98 @@ import { registerField } from '@hanzo/ui/data'
114
114
  registerField('rating', { Display: MyStars, Input: MyStarPicker })
115
115
  ```
116
116
 
117
+ ## Analytics — one flag, and the components report themselves
118
+
119
+ ```tsx
120
+ import { Hanzo } from '@hanzo/ui'
121
+
122
+ <Hanzo analytics={{ product: 'console', ingestKey: process.env.NEXT_PUBLIC_EVENT_INGEST_KEY }}>
123
+ <App />
124
+ </Hanzo>
125
+ ```
126
+
127
+ That is the entire wiring. Every click, form change, submit and route change
128
+ inside the tree arrives on the ONE front door (`POST /v1/event`) annotated with
129
+ the component it happened on — no `onClick` handler anywhere reports anything,
130
+ and no call site changes:
131
+
132
+ ```jsonc
133
+ {
134
+ "event": "$click",
135
+ "$el": "card/button[Save]", // the significant-node trail, root→leaf
136
+ "$role": "button",
137
+ "$component": "button", // from the data-slot every primitive carries
138
+ "$name": "Save"
139
+ }
140
+ ```
141
+
142
+ Component names are real **in production**. Every primitive here stamps a
143
+ `data-slot` through one helper (`slot()`), and the capture engine reads it — so
144
+ attribution does not depend on React fiber owners, which a production build
145
+ minifies away. A component that wants a better name than its slot says so once,
146
+ on itself: `data-hz-name="SaveButton"` outranks everything.
147
+
148
+ ### What it is made of — one of each
149
+
150
+ | Concern | Package | There is exactly one |
151
+ |---|---|---|
152
+ | Client + wire | [`@hanzo/event`](../../pkgs/event) | endpoint `POST /v1/event`, batched, beacon-on-unload |
153
+ | Capture engine | [`@hanzo/observe`](../../pkgs/observe) | delegated listeners, semantic annotation, redaction |
154
+ | Provider + consent | `@hanzogui/telemetry` | `<TelemetryProvider/>`, which `analytics` renders |
155
+
156
+ `analytics` is a **prop, not a default**. Mounting a component library must
157
+ never start a network conversation the app did not ask for: without it `<Hanzo>`
158
+ renders no provider, installs no listener and sends nothing.
159
+
160
+ ### It cannot double-count
161
+
162
+ An app that already mounts `<TelemetryProvider/>` itself leaves `analytics`
163
+ off — but if both are mounted, the events still do not double. The capture
164
+ engine installs *delegated* listeners on a root, so two engines on one root
165
+ would report every interaction twice; a page-wide claim (`Symbol.for`, so
166
+ duplicate copies of the package in one bundle still see each other) gives the
167
+ root to the first engine and leaves any later one inert. Both providers also
168
+ resolve the same client, so there is one session and one stream either way.
169
+
170
+ ### Privacy
171
+
172
+ Consent decides whether any of it runs: Global Privacy Control, Do Not Track,
173
+ and a stored choice a consent banner records — which outranks the browser signal
174
+ in **both** directions, because that is what explicit means. Beyond that:
175
+
176
+ - **Input values are withheld.** `$input`/`$change` carry the field's kind and
177
+ value length, never the typed text.
178
+ - **Sensitive fields are never captured at all** — password, email, card, cvv,
179
+ token, ssn — not even a length.
180
+ - **`data-hz-private`** on any element excludes its whole subtree.
181
+
182
+ ### One ingest key
183
+
184
+ `ingestKey` is a publishable `pk-…` — write-only, safe in a bundle, minted per
185
+ org with `POST /v1/keys {"type":"publishable"}`. Omit it and the client reads
186
+ `NEXT_PUBLIC_EVENT_INGEST_KEY` from the build env, which is the spelling the
187
+ fleet already carries end to end (KMS holds `deploy/EVENT_INGEST_KEY`; the
188
+ Dockerfile takes it as a build-arg and re-exports it with the `NEXT_PUBLIC_`
189
+ prefix Next needs to inline it). A surface with no key reports only for whoever
190
+ is signed in and silently drops every logged-out visitor — the door refuses an
191
+ unattributable write rather than filing it where its owner cannot read it.
192
+
193
+ For a page with no build step at all, the same client ships as a script tag:
194
+ `@hanzo/event/hz.js`, with `data-ingest-key="pk-…"`.
195
+
196
+ ### Naming a moment the components cannot see
197
+
198
+ Autocapture reports what was clicked; it cannot know that a click *was* a
199
+ checkout. Curated events live on `@hanzo/ui/product`, one closed verb set over
200
+ one event name, on the same client and the same stream:
201
+
202
+ ```tsx
203
+ import { useEmit, InstrumentSurface } from '@hanzo/ui/product'
204
+
205
+ const emit = useEmit()
206
+ emit({ component: 'PlanCard', action: 'select', id: 'pro' })
207
+ ```
208
+
117
209
  ## Design principles
118
210
 
119
211
  - **One home, no duplication** — components are extracted, never copied. The record layer's source of truth stays in `@hanzo/data`; `@hanzo/ui` composes it.
@@ -28,6 +28,20 @@ const jsx_runtime_1 = require("react/jsx-runtime");
28
28
  * with no signal in it — which is what a full page of these actually looked
29
29
  * like. Off is muted, on is filled, and the loudest treatment is the one that
30
30
  * means something.
31
+ *
32
+ * THE THUMB TAKES THE SAME TOKEN AS ITS TRACK, and that is not a copy-paste
33
+ * slip. gui wraps the thumb in a `t_SwitchThumb` sub-theme that INVERTS the
34
+ * whole ramp — measured live, `$color3` is rgb(26,26,26) at the frame and
35
+ * rgb(171,171,171) inside the thumb; `$color12` is rgb(250,250,250) and
36
+ * rgb(10,10,10). So naming one token paints both sides of the pair and the
37
+ * contrast is structural: the thumb cannot come out the same colour as the
38
+ * track it sits on, in either state, whatever the palette does later.
39
+ *
40
+ * Picking the tokens by eye instead shipped once, in 8.0.57-8.0.59, and it
41
+ * shipped INVISIBLE: `$color10` under the thumb resolved to the off track's own
42
+ * rgb(26,26,26) and `$color1` to the on track's rgb(255,255,255). The tests
43
+ * passed, because they asked whether the two states DIFFER from each other and
44
+ * never whether either one differs from the thing behind it.
31
45
  */
32
46
  const gui_1 = require("@hanzo/gui");
33
47
  const slot_1 = require("./slot.cjs");
@@ -42,7 +56,7 @@ const Switch = ({ disabled, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.Switch,
42
56
  // else: a control that ignores its own disabled prop looks identical to a
43
57
  // live one, and the page this was found on had a disabled switch sitting
44
58
  // beside eight enabled ones with nothing to tell them apart.
45
- disabled: disabled, opacity: disabled ? 0.5 : 1, cursor: disabled ? 'not-allowed' : 'pointer', ...(0, gesture_1.touch)(TRACK_H, 44, 'y'), ...props, children: (0, jsx_runtime_1.jsx)(gui_1.Switch.Thumb, { ...(0, slot_1.slot)('switch-thumb'), width: THUMB, height: THUMB, backgroundColor: "$color10",
59
+ disabled: disabled, opacity: disabled ? 0.5 : 1, cursor: disabled ? 'not-allowed' : 'pointer', ...(0, gesture_1.touch)(TRACK_H, 44, 'y'), ...props, children: (0, jsx_runtime_1.jsx)(gui_1.Switch.Thumb, { ...(0, slot_1.slot)('switch-thumb'), width: THUMB, height: THUMB, backgroundColor: "$color3",
46
60
  // `bg`, and it is the only one of the three spellings that is both typed
47
61
  // and correct. The Thumb's activeStyle is typed as the SHORTHAND style set:
48
62
  // `backgroundColor` paints but is not in that type; `background` is in it
@@ -51,5 +65,5 @@ const Switch = ({ disabled, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.Switch,
51
65
  // Consumers build with ignoreBuildErrors, so the first would have shipped
52
66
  // an error nobody sees and the second a colour that lands or does not
53
67
  // depending on stylesheet order.
54
- activeStyle: { bg: '$color1' } }) }));
68
+ activeStyle: { bg: '$color12' } }) }));
55
69
  exports.Switch = Switch;
@@ -23,6 +23,20 @@
23
23
  * with no signal in it — which is what a full page of these actually looked
24
24
  * like. Off is muted, on is filled, and the loudest treatment is the one that
25
25
  * means something.
26
+ *
27
+ * THE THUMB TAKES THE SAME TOKEN AS ITS TRACK, and that is not a copy-paste
28
+ * slip. gui wraps the thumb in a `t_SwitchThumb` sub-theme that INVERTS the
29
+ * whole ramp — measured live, `$color3` is rgb(26,26,26) at the frame and
30
+ * rgb(171,171,171) inside the thumb; `$color12` is rgb(250,250,250) and
31
+ * rgb(10,10,10). So naming one token paints both sides of the pair and the
32
+ * contrast is structural: the thumb cannot come out the same colour as the
33
+ * track it sits on, in either state, whatever the palette does later.
34
+ *
35
+ * Picking the tokens by eye instead shipped once, in 8.0.57-8.0.59, and it
36
+ * shipped INVISIBLE: `$color10` under the thumb resolved to the off track's own
37
+ * rgb(26,26,26) and `$color1` to the on track's rgb(255,255,255). The tests
38
+ * passed, because they asked whether the two states DIFFER from each other and
39
+ * never whether either one differs from the thing behind it.
26
40
  */
27
41
  import { Switch as GuiSwitch } from '@hanzo/gui';
28
42
  import type { ComponentProps } from 'react';
@@ -1 +1 @@
1
- {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/switch.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAQ3C,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,SAAS,CAAC,CAAA;AAE1D,QAAA,MAAM,MAAM,GAAI,wBAAwB,WAAW,4CAuClD,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/switch.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAQ3C,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,SAAS,CAAC,CAAA;AAE1D,QAAA,MAAM,MAAM,GAAI,wBAAwB,WAAW,4CAuClD,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -25,6 +25,20 @@ import { jsx as _jsx } from "react/jsx-runtime";
25
25
  * with no signal in it — which is what a full page of these actually looked
26
26
  * like. Off is muted, on is filled, and the loudest treatment is the one that
27
27
  * means something.
28
+ *
29
+ * THE THUMB TAKES THE SAME TOKEN AS ITS TRACK, and that is not a copy-paste
30
+ * slip. gui wraps the thumb in a `t_SwitchThumb` sub-theme that INVERTS the
31
+ * whole ramp — measured live, `$color3` is rgb(26,26,26) at the frame and
32
+ * rgb(171,171,171) inside the thumb; `$color12` is rgb(250,250,250) and
33
+ * rgb(10,10,10). So naming one token paints both sides of the pair and the
34
+ * contrast is structural: the thumb cannot come out the same colour as the
35
+ * track it sits on, in either state, whatever the palette does later.
36
+ *
37
+ * Picking the tokens by eye instead shipped once, in 8.0.57-8.0.59, and it
38
+ * shipped INVISIBLE: `$color10` under the thumb resolved to the off track's own
39
+ * rgb(26,26,26) and `$color1` to the on track's rgb(255,255,255). The tests
40
+ * passed, because they asked whether the two states DIFFER from each other and
41
+ * never whether either one differs from the thing behind it.
28
42
  */
29
43
  import { Switch as GuiSwitch } from '@hanzo/gui';
30
44
  import { slot } from './slot.js';
@@ -39,7 +53,7 @@ const Switch = ({ disabled, ...props }) => (_jsx(GuiSwitch, { ...slot('switch'),
39
53
  // else: a control that ignores its own disabled prop looks identical to a
40
54
  // live one, and the page this was found on had a disabled switch sitting
41
55
  // beside eight enabled ones with nothing to tell them apart.
42
- disabled: disabled, opacity: disabled ? 0.5 : 1, cursor: disabled ? 'not-allowed' : 'pointer', ...touch(TRACK_H, 44, 'y'), ...props, children: _jsx(GuiSwitch.Thumb, { ...slot('switch-thumb'), width: THUMB, height: THUMB, backgroundColor: "$color10",
56
+ disabled: disabled, opacity: disabled ? 0.5 : 1, cursor: disabled ? 'not-allowed' : 'pointer', ...touch(TRACK_H, 44, 'y'), ...props, children: _jsx(GuiSwitch.Thumb, { ...slot('switch-thumb'), width: THUMB, height: THUMB, backgroundColor: "$color3",
43
57
  // `bg`, and it is the only one of the three spellings that is both typed
44
58
  // and correct. The Thumb's activeStyle is typed as the SHORTHAND style set:
45
59
  // `backgroundColor` paints but is not in that type; `background` is in it
@@ -48,6 +62,6 @@ const Switch = ({ disabled, ...props }) => (_jsx(GuiSwitch, { ...slot('switch'),
48
62
  // Consumers build with ignoreBuildErrors, so the first would have shipped
49
63
  // an error nobody sees and the second a colour that lands or does not
50
64
  // depending on stylesheet order.
51
- activeStyle: { bg: '$color1' } }) }));
65
+ activeStyle: { bg: '$color12' } }) }));
52
66
  export { Switch };
53
67
  //# sourceMappingURL=switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/backends/gui/switch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEjC,MAAM,OAAO,GAAG,EAAE,CAAA;AAClB,MAAM,OAAO,GAAG,EAAE,CAAA;AAClB,MAAM,KAAK,GAAG,EAAE,CAAA;AAIhB,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAe,EAAE,EAAE,CAAC,CACtD,KAAC,SAAS,OACJ,IAAI,CAAC,QAAQ,CAAC,EAClB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,CAAC,EACb,eAAe,EAAC,SAAS;IACzB,sEAAsE;IACtE,WAAW,EAAE,CAAC,EACd,WAAW,EAAC,cAAc,EAC1B,WAAW,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE;IACrE,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,KACxC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,KACvB,KAAK,YAET,KAAC,SAAS,CAAC,KAAK,OACV,IAAI,CAAC,cAAc,CAAC,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,eAAe,EAAC,UAAU;QAC1B,yEAAyE;QACzE,4EAA4E;QAC5E,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,0EAA0E;QAC1E,sEAAsE;QACtE,iCAAiC;QACjC,WAAW,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAC9B,GACQ,CACb,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/backends/gui/switch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEjC,MAAM,OAAO,GAAG,EAAE,CAAA;AAClB,MAAM,OAAO,GAAG,EAAE,CAAA;AAClB,MAAM,KAAK,GAAG,EAAE,CAAA;AAIhB,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAe,EAAE,EAAE,CAAC,CACtD,KAAC,SAAS,OACJ,IAAI,CAAC,QAAQ,CAAC,EAClB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,CAAC,EACb,eAAe,EAAC,SAAS;IACzB,sEAAsE;IACtE,WAAW,EAAE,CAAC,EACd,WAAW,EAAC,cAAc,EAC1B,WAAW,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE;IACrE,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,KACxC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,KACvB,KAAK,YAET,KAAC,SAAS,CAAC,KAAK,OACV,IAAI,CAAC,cAAc,CAAC,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,eAAe,EAAC,SAAS;QACzB,yEAAyE;QACzE,4EAA4E;QAC5E,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,0EAA0E;QAC1E,sEAAsE;QACtE,iCAAiC;QACjC,WAAW,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAC/B,GACQ,CACb,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -48,7 +48,7 @@ function Palette({ open, onOpenChange, ops, onRun, active, onActive, search: con
48
48
  onSearch?.(s);
49
49
  };
50
50
  const groups = (0, react_1.useMemo)(() => (0, match_1.survivors)(ops, search, limit), [ops, search, limit]);
51
- return ((0, jsx_runtime_1.jsxs)(gui_2.CommandDialog, { open: open, onOpenChange: onOpenChange, title: title, description: placeholder, value: active, onValueChange: onActive, shouldFilter: false, children: [(0, jsx_runtime_1.jsx)(gui_2.CommandInput, { value: search, onValueChange: setSearch, placeholder: placeholder, color: "$color", placeholderTextColor: "$color11" }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { minH: height, children: [(0, jsx_runtime_1.jsxs)(gui_2.CommandList, { maxH: height, width: children ? "50%" : "100%", borderRightWidth: children ? 1 : 0, borderColor: "$borderColor", py: "$1", children: [groups.length === 0 && ((0, jsx_runtime_1.jsx)(gui_2.CommandEmpty, { children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { color: "$color11", children: empty }) })), groups.map(([group, items]) => ((0, jsx_runtime_1.jsx)(gui_2.CommandGroup, { heading: group, children: items.map((op) => ((0, jsx_runtime_1.jsxs)(gui_2.CommandItem, { value: op.id, onSelect: () => onRun(op), gap: "$2", children: [op.icon, (0, jsx_runtime_1.jsx)(gui_1.SizableText, { numberOfLines: 1, children: op.label }), op.hint ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { numberOfLines: 1, fontSize: "$1", color: "$color11", children: op.hint })) : null, (0, jsx_runtime_1.jsx)(Method, { of: op }), op.end] }, op.id))) }, group)))] }), children ? (0, jsx_runtime_1.jsx)(gui_1.YStack, { width: "50%", children: children }) : null] }), footer ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { items: "center", gap: "$4", borderTopWidth: 1, borderColor: "$borderColor", px: "$3", py: "$2", children: footer })) : null] }));
51
+ return ((0, jsx_runtime_1.jsxs)(gui_2.CommandDialog, { open: open, onOpenChange: onOpenChange, title: title, description: placeholder, value: active, onValueChange: onActive, shouldFilter: false, children: [(0, jsx_runtime_1.jsx)(gui_2.CommandInput, { value: search, onValueChange: setSearch, placeholder: placeholder, color: "$color", placeholderTextColor: "$color11" }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { minH: height, children: [(0, jsx_runtime_1.jsxs)(gui_2.CommandList, { maxH: height, width: children ? "50%" : "100%", borderRightWidth: children ? 1 : 0, borderColor: "$borderColor", py: "$1", children: [groups.length === 0 && ((0, jsx_runtime_1.jsx)(gui_2.CommandEmpty, { children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { color: "$color11", children: empty }) })), groups.map(([group, items]) => ((0, jsx_runtime_1.jsx)(gui_2.CommandGroup, { heading: group, children: items.map((op) => ((0, jsx_runtime_1.jsxs)(gui_2.CommandItem, { value: op.id, onSelect: () => onRun(op), gap: "$2", children: [op.icon, (0, jsx_runtime_1.jsxs)(gui_1.XStack, { flex: 1, items: "center", gap: "$2", overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { numberOfLines: 1, shrink: 0, children: op.label }), op.hint ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { numberOfLines: 1, flex: 1, fontSize: "$1", color: "$color11", children: op.hint })) : null] }), (0, jsx_runtime_1.jsx)(Method, { of: op }), op.end] }, op.id))) }, group)))] }), children ? (0, jsx_runtime_1.jsx)(gui_1.YStack, { width: "50%", children: children }) : null] }), footer ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { items: "center", gap: "$4", borderTopWidth: 1, borderColor: "$borderColor", px: "$3", py: "$2", children: footer })) : null] }));
52
52
  }
53
53
  /**
54
54
  * The method, at the end of the row, for route commands only.
@@ -61,5 +61,5 @@ function Palette({ open, onOpenChange, ops, onRun, active, onActive, search: con
61
61
  function Method({ of }) {
62
62
  if (of.method === undefined)
63
63
  return null;
64
- return ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { ml: "auto", fontFamily: "$mono", fontSize: 10, letterSpacing: 0.4, color: of.method === match_1.SAFE ? "$color11" : "$color", children: of.method }));
64
+ return ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { shrink: 0, fontFamily: "$mono", fontSize: 10, letterSpacing: 0.4, color: of.method === match_1.SAFE ? "$color11" : "$color", children: of.method }));
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Palette.d.ts","sourceRoot":"","sources":["../../src/product/Palette.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAA;AAWzD,OAAO,EAAmB,KAAK,EAAE,EAAE,MAAM,SAAS,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,oEAAoE;IACpE,GAAG,EAAE,EAAE,EAAE,CAAA;IACT,0DAA0D;IAC1D,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,QAAQ,EACR,WAAgC,EAChC,KAA2B,EAC3B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAY,EACZ,KAAyB,GAC1B,EAAE,YAAY,2CA0Ed"}
1
+ {"version":3,"file":"Palette.d.ts","sourceRoot":"","sources":["../../src/product/Palette.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAA;AAWzD,OAAO,EAAmB,KAAK,EAAE,EAAE,MAAM,SAAS,CAAA;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,oEAAoE;IACpE,GAAG,EAAE,EAAE,EAAE,CAAA;IACT,0DAA0D;IAC1D,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,YAAY,EACZ,GAAG,EACH,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,QAAQ,EACR,WAAgC,EAChC,KAA2B,EAC3B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAY,EACZ,KAAyB,GAC1B,EAAE,YAAY,2CAqFd"}
@@ -45,7 +45,7 @@ export function Palette({ open, onOpenChange, ops, onRun, active, onActive, sear
45
45
  onSearch?.(s);
46
46
  };
47
47
  const groups = useMemo(() => survivors(ops, search, limit), [ops, search, limit]);
48
- return (_jsxs(CommandDialog, { open: open, onOpenChange: onOpenChange, title: title, description: placeholder, value: active, onValueChange: onActive, shouldFilter: false, children: [_jsx(CommandInput, { value: search, onValueChange: setSearch, placeholder: placeholder, color: "$color", placeholderTextColor: "$color11" }), _jsxs(XStack, { minH: height, children: [_jsxs(CommandList, { maxH: height, width: children ? "50%" : "100%", borderRightWidth: children ? 1 : 0, borderColor: "$borderColor", py: "$1", children: [groups.length === 0 && (_jsx(CommandEmpty, { children: _jsx(SizableText, { color: "$color11", children: empty }) })), groups.map(([group, items]) => (_jsx(CommandGroup, { heading: group, children: items.map((op) => (_jsxs(CommandItem, { value: op.id, onSelect: () => onRun(op), gap: "$2", children: [op.icon, _jsx(SizableText, { numberOfLines: 1, children: op.label }), op.hint ? (_jsx(SizableText, { numberOfLines: 1, fontSize: "$1", color: "$color11", children: op.hint })) : null, _jsx(Method, { of: op }), op.end] }, op.id))) }, group)))] }), children ? _jsx(YStack, { width: "50%", children: children }) : null] }), footer ? (_jsx(XStack, { items: "center", gap: "$4", borderTopWidth: 1, borderColor: "$borderColor", px: "$3", py: "$2", children: footer })) : null] }));
48
+ return (_jsxs(CommandDialog, { open: open, onOpenChange: onOpenChange, title: title, description: placeholder, value: active, onValueChange: onActive, shouldFilter: false, children: [_jsx(CommandInput, { value: search, onValueChange: setSearch, placeholder: placeholder, color: "$color", placeholderTextColor: "$color11" }), _jsxs(XStack, { minH: height, children: [_jsxs(CommandList, { maxH: height, width: children ? "50%" : "100%", borderRightWidth: children ? 1 : 0, borderColor: "$borderColor", py: "$1", children: [groups.length === 0 && (_jsx(CommandEmpty, { children: _jsx(SizableText, { color: "$color11", children: empty }) })), groups.map(([group, items]) => (_jsx(CommandGroup, { heading: group, children: items.map((op) => (_jsxs(CommandItem, { value: op.id, onSelect: () => onRun(op), gap: "$2", children: [op.icon, _jsxs(XStack, { flex: 1, items: "center", gap: "$2", overflow: "hidden", children: [_jsx(SizableText, { numberOfLines: 1, shrink: 0, children: op.label }), op.hint ? (_jsx(SizableText, { numberOfLines: 1, flex: 1, fontSize: "$1", color: "$color11", children: op.hint })) : null] }), _jsx(Method, { of: op }), op.end] }, op.id))) }, group)))] }), children ? _jsx(YStack, { width: "50%", children: children }) : null] }), footer ? (_jsx(XStack, { items: "center", gap: "$4", borderTopWidth: 1, borderColor: "$borderColor", px: "$3", py: "$2", children: footer })) : null] }));
49
49
  }
50
50
  /**
51
51
  * The method, at the end of the row, for route commands only.
@@ -58,6 +58,6 @@ export function Palette({ open, onOpenChange, ops, onRun, active, onActive, sear
58
58
  function Method({ of }) {
59
59
  if (of.method === undefined)
60
60
  return null;
61
- return (_jsx(SizableText, { ml: "auto", fontFamily: "$mono", fontSize: 10, letterSpacing: 0.4, color: of.method === SAFE ? "$color11" : "$color", children: of.method }));
61
+ return (_jsx(SizableText, { shrink: 0, fontFamily: "$mono", fontSize: 10, letterSpacing: 0.4, color: of.method === SAFE ? "$color11" : "$color", children: of.method }));
62
62
  }
63
63
  //# sourceMappingURL=Palette.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Palette.js","sourceRoot":"","sources":["../../src/product/Palette.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Palette.js","sourceRoot":"","sources":["../../src/product/Palette.tsx"],"names":[],"mappings":"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"}
@@ -7,8 +7,13 @@
7
7
  // `EmptyState` or `ThemeToggle` reports the SAME interaction vocabulary with
8
8
  // zero app code. Nothing to wire, nothing to remember, nothing to drift.
9
9
  //
10
- // import { emit, useEmit, InstrumentSurface } from '@hanzo/ui'
11
- // <InstrumentSurface name="billing">…</InstrumentSurface> // optional context
10
+ // import { emit, useEmit, InstrumentSurface } from '@hanzo/ui/product'
11
+ // <InstrumentSurface value="billing">…</InstrumentSurface> // optional context
12
+ //
13
+ // This is the CURATED half. `<Hanzo analytics>` already reports every click,
14
+ // change, submit and route change on its own, annotated with the component it
15
+ // happened on — what autocapture cannot know is that a click WAS a checkout.
16
+ // That is what this names. Same client, same stream, same front door.
12
17
  //
13
18
  // ONE event name, structured properties — the taxonomy in @hanzo/event is a
14
19
  // CLOSED set, and its own rule for a product-specific moment is "the `action`
@@ -1 +1 @@
1
- {"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../src/product/instrument.ts"],"names":[],"mappings":"AA6BA;kFACkF;AAClF,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,GACN,OAAO,CAAA;AAEX;+EAC+E;AAC/E,MAAM,WAAW,OAAO;IACtB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,QAAQ,CAAA;IAChB,yEAAyE;IACzE,EAAE,CAAC,EAAE,MAAM,CAAA;IACX;;0CAEsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IACjC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD;mEACmE;AACnE,eAAO,MAAM,iBAAiB,8CAA0B,CAAA;AAExD,iEAAiE;AACjE,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,SAAuC,CAAA;AAE9E;8EAC8E;AAC9E,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAQrC;AAED;gFACgF;AAChF,wBAAgB,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAM9C;AAED;;;;mFAImF;AACnF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO7D;AAED;;kCAEkC;AAClC,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,GAAG,SAAS,KAAG,MAA4B,CAAA"}
1
+ {"version":3,"file":"instrument.d.ts","sourceRoot":"","sources":["../../src/product/instrument.ts"],"names":[],"mappings":"AAkCA;kFACkF;AAClF,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,GACN,OAAO,CAAA;AAEX;+EAC+E;AAC/E,MAAM,WAAW,OAAO;IACtB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,QAAQ,CAAA;IAChB,yEAAyE;IACzE,EAAE,CAAC,EAAE,MAAM,CAAA;IACX;;0CAEsC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IACjC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD;mEACmE;AACnE,eAAO,MAAM,iBAAiB,8CAA0B,CAAA;AAExD,iEAAiE;AACjE,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,SAAuC,CAAA;AAE9E;8EAC8E;AAC9E,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAQrC;AAED;gFACgF;AAChF,wBAAgB,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAM9C;AAED;;;;mFAImF;AACnF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO7D;AAED;;kCAEkC;AAClC,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,GAAG,SAAS,KAAG,MAA4B,CAAA"}
@@ -6,8 +6,13 @@
6
6
  // `EmptyState` or `ThemeToggle` reports the SAME interaction vocabulary with
7
7
  // zero app code. Nothing to wire, nothing to remember, nothing to drift.
8
8
  //
9
- // import { emit, useEmit, InstrumentSurface } from '@hanzo/ui'
10
- // <InstrumentSurface name="billing">…</InstrumentSurface> // optional context
9
+ // import { emit, useEmit, InstrumentSurface } from '@hanzo/ui/product'
10
+ // <InstrumentSurface value="billing">…</InstrumentSurface> // optional context
11
+ //
12
+ // This is the CURATED half. `<Hanzo analytics>` already reports every click,
13
+ // change, submit and route change on its own, annotated with the component it
14
+ // happened on — what autocapture cannot know is that a click WAS a checkout.
15
+ // That is what this names. Same client, same stream, same front door.
11
16
  //
12
17
  // ONE event name, structured properties — the taxonomy in @hanzo/event is a
13
18
  // CLOSED set, and its own rule for a product-specific moment is "the `action`
@@ -1 +1 @@
1
- {"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../src/product/instrument.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAChF,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,EAAE;AACF,iEAAiE;AACjE,kFAAkF;AAClF,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,gEAAgE;AAChE,0EAA0E;AAC1E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,gFAAgF;AAChF,+CAA+C;AAE/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAC9D,iFAAiF;AACjF,iFAAiF;AACjF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAoCnD;;4BAE4B;AAC5B,MAAM,cAAc,GAAG,aAAa,CAAqB,SAAS,CAAC,CAAA;AAEnE;mEACmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,QAAQ,CAAA;AAExD,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,GAAuB,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;AAE9E;8EAC8E;AAC9E,MAAM,UAAU,IAAI,CAAC,CAAU;IAC7B,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;QACzB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KAC7D,CAAC,CAAA;AACJ,CAAC;AAED;gFACgF;AAChF,MAAM,UAAU,OAAO;IACrB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,OAAO,WAAW,CAChB,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9F,CAAC,OAAO,CAAC,CACV,CAAA;AACH,CAAC;AAED;;;;mFAImF;AACnF,MAAM,UAAU,OAAO,CAAC,QAAiB;IACvC,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IACrE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5F,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IACjC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;kCAEkC;AAClC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAqB,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../src/product/instrument.ts"],"names":[],"mappings":"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"}
package/dist/root.cjs CHANGED
@@ -38,6 +38,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  * this flag controls.
39
39
  */
40
40
  const gui_1 = require("@hanzo/gui");
41
+ const telemetry_1 = require("@hanzogui/telemetry");
41
42
  const gui_config_1 = require("./gui-config.cjs");
42
43
  require("./styles.css");
43
44
  /** A stylesheet that did not reach the document is invisible until someone opens
@@ -58,10 +59,17 @@ const assertStylesheet = () => {
58
59
  'that does not process CSS imported from node_modules has dropped it. Import it ' +
59
60
  "directly instead: import '@hanzo/ui/styles.css'.");
60
61
  };
61
- const Hanzo = ({ children, theme = 'dark' }) => {
62
+ const Hanzo = ({ children, theme = 'dark', analytics }) => {
62
63
  if (process.env.NODE_ENV !== 'production')
63
64
  assertStylesheet();
64
- return ((0, jsx_runtime_1.jsx)(gui_1.GuiProvider, { config: gui_config_1.config, defaultTheme: theme, disableInjectCSS: true, children: children }));
65
+ const tree = ((0, jsx_runtime_1.jsx)(gui_1.GuiProvider, { config: gui_config_1.config, defaultTheme: theme, disableInjectCSS: true, children: children }));
66
+ // OUTSIDE the gui provider: capture is delegated at the document, so it does
67
+ // not need to be inside the styled tree, and an app that renders its own
68
+ // `<TelemetryProvider/>` above `<Hanzo>` then nests two providers of the same
69
+ // kind rather than interleaving them with the theme.
70
+ if (!analytics)
71
+ return tree;
72
+ return (0, jsx_runtime_1.jsx)(telemetry_1.TelemetryProvider, { ...(analytics === true ? {} : analytics), children: tree });
65
73
  };
66
74
  exports.Hanzo = Hanzo;
67
75
  exports.default = exports.Hanzo;
package/dist/root.d.ts CHANGED
@@ -1,10 +1,35 @@
1
+ import { type TelemetryConfig } from '@hanzogui/telemetry';
1
2
  import type { ReactNode } from 'react';
2
3
  import './styles.css';
3
4
  export type HanzoProps = {
4
5
  children?: ReactNode;
5
6
  /** Dark-first Hanzo identity. `light` retunes it. */
6
7
  theme?: 'dark' | 'light';
8
+ /**
9
+ * Interaction analytics for everything inside — OFF unless you ask.
10
+ *
11
+ * <Hanzo analytics> // zero config
12
+ * <Hanzo analytics={{ product: 'console' }}> // named surface
13
+ *
14
+ * `true` is the whole setup: every click, form change, submit and route
15
+ * change inside this tree arrives on the ONE front door (`POST /v1/event`)
16
+ * annotated with the component it happened on — `card/button[Save]` — with
17
+ * input values withheld. Nothing to instrument at a call site.
18
+ *
19
+ * It is a PROP, not the default, because mounting a component library must
20
+ * never start a network conversation an app did not ask for. Off, this
21
+ * renders no provider, installs no listener and sends nothing.
22
+ *
23
+ * On, it is the one wiring: ONE client (@hanzo/event), ONE capture engine
24
+ * (@hanzo/observe), ONE endpoint, ONE publishable key — and consent decides
25
+ * whether any of it runs (Global Privacy Control, Do Not Track, and a stored
26
+ * choice a banner records, which outranks both). An app that already mounts
27
+ * `<TelemetryProvider/>` itself leaves this off; both would be the same
28
+ * client on the same stream, and the capture engine refuses a root another
29
+ * engine holds, so the events do not double either way.
30
+ */
31
+ analytics?: boolean | TelemetryConfig;
7
32
  };
8
- export declare const Hanzo: ({ children, theme }: HanzoProps) => import("react/jsx-runtime").JSX.Element;
33
+ export declare const Hanzo: ({ children, theme, analytics }: HanzoProps) => import("react/jsx-runtime").JSX.Element;
9
34
  export default Hanzo;
10
35
  //# sourceMappingURL=root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../src/root.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB,CAAA;AAqBD,eAAO,MAAM,KAAK,GAAI,qBAA8B,UAAU,4CAO7D,CAAA;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../src/root.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACxB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;CACtC,CAAA;AAqBD,eAAO,MAAM,KAAK,GAAI,gCAAyC,UAAU,4CAaxE,CAAA;AAED,eAAe,KAAK,CAAA"}
package/dist/root.js CHANGED
@@ -35,6 +35,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
35
35
  * this flag controls.
36
36
  */
37
37
  import { GuiProvider } from '@hanzo/gui';
38
+ import { TelemetryProvider } from '@hanzogui/telemetry';
38
39
  import { config } from './gui-config.js';
39
40
  import './styles.css';
40
41
  /** A stylesheet that did not reach the document is invisible until someone opens
@@ -55,10 +56,17 @@ const assertStylesheet = () => {
55
56
  'that does not process CSS imported from node_modules has dropped it. Import it ' +
56
57
  "directly instead: import '@hanzo/ui/styles.css'.");
57
58
  };
58
- export const Hanzo = ({ children, theme = 'dark' }) => {
59
+ export const Hanzo = ({ children, theme = 'dark', analytics }) => {
59
60
  if (process.env.NODE_ENV !== 'production')
60
61
  assertStylesheet();
61
- return (_jsx(GuiProvider, { config: config, defaultTheme: theme, disableInjectCSS: true, children: children }));
62
+ const tree = (_jsx(GuiProvider, { config: config, defaultTheme: theme, disableInjectCSS: true, children: children }));
63
+ // OUTSIDE the gui provider: capture is delegated at the document, so it does
64
+ // not need to be inside the styled tree, and an app that renders its own
65
+ // `<TelemetryProvider/>` above `<Hanzo>` then nests two providers of the same
66
+ // kind rather than interleaving them with the theme.
67
+ if (!analytics)
68
+ return tree;
69
+ return _jsx(TelemetryProvider, { ...(analytics === true ? {} : analytics), children: tree });
62
70
  };
63
71
  export default Hanzo;
64
72
  //# sourceMappingURL=root.js.map
package/dist/root.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,cAAc,CAAA;AAQrB;;;;;;qEAMqE;AACrE,IAAI,OAAO,GAAG,KAAK,CAAA;AACnB,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,IAAI,OAAO,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAC3F,OAAO,GAAG,IAAI,CAAA;IACd,IAAI,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE;QAAE,OAAM;IACnG,MAAM,IAAI,KAAK,CACb,qFAAqF;QACnF,iFAAiF;QACjF,kDAAkD,CACrD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM,EAAc,EAAE,EAAE;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,gBAAgB,EAAE,CAAA;IAC7D,OAAO,CACL,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,kBAC/D,QAAQ,GACG,CACf,CAAA;AACH,CAAC,CAAA;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAA;AAG7E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,cAAc,CAAA;AAgCrB;;;;;;qEAMqE;AACrE,IAAI,OAAO,GAAG,KAAK,CAAA;AACnB,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,IAAI,OAAO,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAC3F,OAAO,GAAG,IAAI,CAAA;IACd,IAAI,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE;QAAE,OAAM;IACnG,MAAM,IAAI,KAAK,CACb,qFAAqF;QACnF,iFAAiF;QACjF,kDAAkD,CACrD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,MAAM,EAAE,SAAS,EAAc,EAAE,EAAE;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,gBAAgB,EAAE,CAAA;IAC7D,MAAM,IAAI,GAAG,CACX,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,kBAC/D,QAAQ,GACG,CACf,CAAA;IACD,6EAA6E;IAC7E,yEAAyE;IACzE,8EAA8E;IAC9E,qDAAqD;IACrD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAC3B,OAAO,KAAC,iBAAiB,OAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,YAAG,IAAI,GAAqB,CAAA;AACjG,CAAC,CAAA;AAED,eAAe,KAAK,CAAA"}
package/dist/styles.css CHANGED
@@ -2109,8 +2109,6 @@
2109
2109
  :root ._bg-background{background-color:var(--background);}
2110
2110
  :root ._bg-backgroundA94988999{background-color:var(--backgroundActive);}
2111
2111
  :root ._bg-borderColor{background-color:var(--borderColor);}
2112
- :root ._bg-color1{background-color:var(--color1);}
2113
- :root ._bg-color10{background-color:var(--color10);}
2114
2112
  :root ._bg-color12{background-color:var(--color12);}
2115
2113
  :root ._bg-color2{background-color:var(--color2);}
2116
2114
  :root ._bg-color3{background-color:var(--color3);}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.0.58",
3
+ "version": "8.0.60",
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": {