@hanzo/gui 8.3.1 → 8.3.3

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 (206) hide show
  1. package/css-check.mjs +1 -1
  2. package/dist/cjs/createGui.js +64 -0
  3. package/dist/cjs/createGui.js.map +1 -0
  4. package/dist/cjs/index.js +130 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/cjs/linear-gradient.js +6 -0
  7. package/dist/cjs/linear-gradient.js.map +1 -0
  8. package/dist/cjs/package.json +1 -0
  9. package/dist/cjs/setup.js +14 -0
  10. package/dist/cjs/setup.js.map +1 -0
  11. package/dist/cjs/viewTypes.js +3 -0
  12. package/dist/cjs/viewTypes.js.map +1 -0
  13. package/dist/cjs/views/Anchor.js +30 -0
  14. package/dist/cjs/views/Anchor.js.map +1 -0
  15. package/dist/cjs/views/EnsureFlexed.js +18 -0
  16. package/dist/cjs/views/EnsureFlexed.js.map +1 -0
  17. package/dist/cjs/views/Fieldset.js +20 -0
  18. package/dist/cjs/views/Fieldset.js.map +1 -0
  19. package/dist/cjs/views/GuiProvider.js +25 -0
  20. package/dist/cjs/views/GuiProvider.js.map +1 -0
  21. package/dist/cjs/views/Text.js +17 -0
  22. package/dist/cjs/views/Text.js.map +1 -0
  23. package/dist/cjs/views/VisuallyHidden.js +38 -0
  24. package/dist/cjs/views/VisuallyHidden.js.map +1 -0
  25. package/dist/esm/createGui.js +61 -0
  26. package/dist/esm/createGui.js.map +1 -0
  27. package/dist/esm/index.js +69 -64
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/linear-gradient.js +2 -0
  30. package/dist/esm/linear-gradient.js.map +1 -0
  31. package/dist/esm/setup.js +11 -0
  32. package/dist/esm/setup.js.map +1 -0
  33. package/dist/esm/viewTypes.js +2 -0
  34. package/dist/esm/viewTypes.js.map +1 -0
  35. package/dist/esm/views/Anchor.js +27 -0
  36. package/dist/esm/views/Anchor.js.map +1 -0
  37. package/dist/esm/views/EnsureFlexed.js +15 -0
  38. package/dist/esm/views/EnsureFlexed.js.map +1 -0
  39. package/dist/esm/views/Fieldset.js +17 -0
  40. package/dist/esm/views/Fieldset.js.map +1 -0
  41. package/dist/esm/views/GuiProvider.js +21 -0
  42. package/dist/esm/views/GuiProvider.js.map +1 -0
  43. package/dist/esm/views/Text.js +14 -0
  44. package/dist/esm/views/Text.js.map +1 -0
  45. package/dist/esm/views/VisuallyHidden.js +35 -0
  46. package/dist/esm/views/VisuallyHidden.js.map +1 -0
  47. package/package.json +96 -128
  48. package/src/index.ts +8 -8
  49. package/types/index.d.ts +8 -8
  50. package/types/index.d.ts.map +1 -1
  51. package/types/views/Anchor.d.ts +2 -2
  52. package/types/views/GuiProvider.d.ts +1 -1
  53. package/types/views/GuiProvider.d.ts.map +1 -1
  54. package/types/views/VisuallyHidden.d.ts +1 -1
  55. package/dist/cjs/createGui.cjs +0 -80
  56. package/dist/cjs/createGui.native.js +0 -89
  57. package/dist/cjs/createGui.native.js.map +0 -1
  58. package/dist/cjs/index.cjs +0 -148
  59. package/dist/cjs/index.native.js +0 -151
  60. package/dist/cjs/index.native.js.map +0 -1
  61. package/dist/cjs/linear-gradient.cjs +0 -28
  62. package/dist/cjs/linear-gradient.native.js +0 -31
  63. package/dist/cjs/linear-gradient.native.js.map +0 -1
  64. package/dist/cjs/setup.cjs +0 -30
  65. package/dist/cjs/setup.native.js +0 -35
  66. package/dist/cjs/setup.native.js.map +0 -1
  67. package/dist/cjs/viewTypes.cjs +0 -18
  68. package/dist/cjs/viewTypes.native.js +0 -21
  69. package/dist/cjs/viewTypes.native.js.map +0 -1
  70. package/dist/cjs/views/Anchor.cjs +0 -60
  71. package/dist/cjs/views/Anchor.native.js +0 -65
  72. package/dist/cjs/views/Anchor.native.js.map +0 -1
  73. package/dist/cjs/views/EnsureFlexed.cjs +0 -38
  74. package/dist/cjs/views/EnsureFlexed.native.js +0 -41
  75. package/dist/cjs/views/EnsureFlexed.native.js.map +0 -1
  76. package/dist/cjs/views/Fieldset.cjs +0 -43
  77. package/dist/cjs/views/Fieldset.native.js +0 -46
  78. package/dist/cjs/views/Fieldset.native.js.map +0 -1
  79. package/dist/cjs/views/GuiProvider.cjs +0 -54
  80. package/dist/cjs/views/GuiProvider.native.js +0 -63
  81. package/dist/cjs/views/GuiProvider.native.js.map +0 -1
  82. package/dist/cjs/views/Text.cjs +0 -40
  83. package/dist/cjs/views/Text.native.js +0 -43
  84. package/dist/cjs/views/Text.native.js.map +0 -1
  85. package/dist/cjs/views/VisuallyHidden.cjs +0 -60
  86. package/dist/cjs/views/VisuallyHidden.native.js +0 -63
  87. package/dist/cjs/views/VisuallyHidden.native.js.map +0 -1
  88. package/dist/dist-WUUTYzbQ.cjs +0 -540
  89. package/dist/esm/createGui.mjs +0 -55
  90. package/dist/esm/createGui.mjs.map +0 -1
  91. package/dist/esm/createGui.native.js +0 -61
  92. package/dist/esm/createGui.native.js.map +0 -1
  93. package/dist/esm/index.mjs +0 -64
  94. package/dist/esm/index.mjs.map +0 -1
  95. package/dist/esm/index.native.js +0 -64
  96. package/dist/esm/index.native.js.map +0 -1
  97. package/dist/esm/linear-gradient.mjs +0 -3
  98. package/dist/esm/linear-gradient.mjs.map +0 -1
  99. package/dist/esm/linear-gradient.native.js +0 -3
  100. package/dist/esm/linear-gradient.native.js.map +0 -1
  101. package/dist/esm/setup.mjs +0 -6
  102. package/dist/esm/setup.mjs.map +0 -1
  103. package/dist/esm/setup.native.js +0 -8
  104. package/dist/esm/setup.native.js.map +0 -1
  105. package/dist/esm/viewTypes.mjs +0 -2
  106. package/dist/esm/viewTypes.mjs.map +0 -1
  107. package/dist/esm/viewTypes.native.js +0 -2
  108. package/dist/esm/viewTypes.native.js.map +0 -1
  109. package/dist/esm/views/Anchor.mjs +0 -35
  110. package/dist/esm/views/Anchor.mjs.map +0 -1
  111. package/dist/esm/views/Anchor.native.js +0 -37
  112. package/dist/esm/views/Anchor.native.js.map +0 -1
  113. package/dist/esm/views/EnsureFlexed.mjs +0 -13
  114. package/dist/esm/views/EnsureFlexed.mjs.map +0 -1
  115. package/dist/esm/views/EnsureFlexed.native.js +0 -13
  116. package/dist/esm/views/EnsureFlexed.native.js.map +0 -1
  117. package/dist/esm/views/Fieldset.mjs +0 -18
  118. package/dist/esm/views/Fieldset.mjs.map +0 -1
  119. package/dist/esm/views/Fieldset.native.js +0 -18
  120. package/dist/esm/views/Fieldset.native.js.map +0 -1
  121. package/dist/esm/views/GuiProvider.mjs +0 -29
  122. package/dist/esm/views/GuiProvider.mjs.map +0 -1
  123. package/dist/esm/views/GuiProvider.native.js +0 -35
  124. package/dist/esm/views/GuiProvider.native.js.map +0 -1
  125. package/dist/esm/views/Text.mjs +0 -15
  126. package/dist/esm/views/Text.mjs.map +0 -1
  127. package/dist/esm/views/Text.native.js +0 -15
  128. package/dist/esm/views/Text.native.js.map +0 -1
  129. package/dist/esm/views/VisuallyHidden.mjs +0 -35
  130. package/dist/esm/views/VisuallyHidden.mjs.map +0 -1
  131. package/dist/esm/views/VisuallyHidden.native.js +0 -35
  132. package/dist/esm/views/VisuallyHidden.native.js.map +0 -1
  133. package/dist/jsx/createGui.mjs +0 -55
  134. package/dist/jsx/createGui.mjs.map +0 -1
  135. package/dist/jsx/createGui.native.js +0 -89
  136. package/dist/jsx/createGui.native.js.map +0 -1
  137. package/dist/jsx/index.js +0 -64
  138. package/dist/jsx/index.js.map +0 -1
  139. package/dist/jsx/index.mjs +0 -64
  140. package/dist/jsx/index.mjs.map +0 -1
  141. package/dist/jsx/index.native.js +0 -151
  142. package/dist/jsx/index.native.js.map +0 -1
  143. package/dist/jsx/linear-gradient.mjs +0 -3
  144. package/dist/jsx/linear-gradient.mjs.map +0 -1
  145. package/dist/jsx/linear-gradient.native.js +0 -31
  146. package/dist/jsx/linear-gradient.native.js.map +0 -1
  147. package/dist/jsx/setup.mjs +0 -6
  148. package/dist/jsx/setup.mjs.map +0 -1
  149. package/dist/jsx/setup.native.js +0 -35
  150. package/dist/jsx/setup.native.js.map +0 -1
  151. package/dist/jsx/viewTypes.mjs +0 -2
  152. package/dist/jsx/viewTypes.mjs.map +0 -1
  153. package/dist/jsx/viewTypes.native.js +0 -21
  154. package/dist/jsx/viewTypes.native.js.map +0 -1
  155. package/dist/jsx/views/Anchor.mjs +0 -35
  156. package/dist/jsx/views/Anchor.mjs.map +0 -1
  157. package/dist/jsx/views/Anchor.native.js +0 -65
  158. package/dist/jsx/views/Anchor.native.js.map +0 -1
  159. package/dist/jsx/views/EnsureFlexed.mjs +0 -13
  160. package/dist/jsx/views/EnsureFlexed.mjs.map +0 -1
  161. package/dist/jsx/views/EnsureFlexed.native.js +0 -41
  162. package/dist/jsx/views/EnsureFlexed.native.js.map +0 -1
  163. package/dist/jsx/views/Fieldset.mjs +0 -18
  164. package/dist/jsx/views/Fieldset.mjs.map +0 -1
  165. package/dist/jsx/views/Fieldset.native.js +0 -46
  166. package/dist/jsx/views/Fieldset.native.js.map +0 -1
  167. package/dist/jsx/views/GuiProvider.mjs +0 -29
  168. package/dist/jsx/views/GuiProvider.mjs.map +0 -1
  169. package/dist/jsx/views/GuiProvider.native.js +0 -63
  170. package/dist/jsx/views/GuiProvider.native.js.map +0 -1
  171. package/dist/jsx/views/Text.mjs +0 -15
  172. package/dist/jsx/views/Text.mjs.map +0 -1
  173. package/dist/jsx/views/Text.native.js +0 -43
  174. package/dist/jsx/views/Text.native.js.map +0 -1
  175. package/dist/jsx/views/VisuallyHidden.mjs +0 -35
  176. package/dist/jsx/views/VisuallyHidden.mjs.map +0 -1
  177. package/dist/jsx/views/VisuallyHidden.native.js +0 -63
  178. package/dist/jsx/views/VisuallyHidden.native.js.map +0 -1
  179. package/dist/native.cjs +0 -36027
  180. package/dist/objectSpread2-wS8nGfQI.cjs +0 -163
  181. package/dist/test.cjs +0 -36094
  182. package/linear-gradient/index.cjs +0 -2
  183. package/linear-gradient/index.d.ts +0 -1
  184. package/linear-gradient/index.js +0 -2
  185. package/linear-gradient/index.native.cjs +0 -2
  186. package/linear-gradient/index.native.js +0 -2
  187. package/native/index.cjs +0 -2
  188. package/native/index.js +0 -2
  189. package/native-test/index.cjs +0 -2
  190. package/native-test/index.js +0 -2
  191. package/native-test/index.native.cjs +0 -2
  192. package/native-test/index.native.js +0 -2
  193. package/native-test.cjs +0 -1
  194. package/native-test.d.ts +0 -1
  195. package/native.cjs +0 -1
  196. package/native.d.ts +0 -1
  197. package/react-native-web/index.cjs +0 -2
  198. package/react-native-web/index.js +0 -2
  199. package/react-native-web/index.native.cjs +0 -2
  200. package/react-native-web/index.native.js +0 -2
  201. package/react-native-web.cjs +0 -1
  202. package/web/index.cjs +0 -2
  203. package/web/index.js +0 -2
  204. package/web/index.native.cjs +0 -2
  205. package/web/index.native.js +0 -2
  206. package/web.cjs +0 -1
@@ -1,540 +0,0 @@
1
- const require_objectSpread2 = require("./objectSpread2-wS8nGfQI.cjs");
2
- //#region ../../../node_modules/@hanzo/observe/dist/index.mjs
3
- require_objectSpread2.init_objectSpread2();
4
- var CONTEXT = "https://schema.hanzo.ai/observe";
5
- var MAX_NAME = 80;
6
- var TAG_ROLE = {
7
- nav: "navigation",
8
- main: "main",
9
- header: "banner",
10
- footer: "contentinfo",
11
- aside: "complementary",
12
- form: "form",
13
- button: "button",
14
- select: "combobox",
15
- textarea: "textbox",
16
- img: "img",
17
- ul: "list",
18
- ol: "list",
19
- li: "listitem",
20
- table: "table",
21
- dialog: "dialog",
22
- article: "article",
23
- section: "region",
24
- summary: "button"
25
- };
26
- var INPUT_ROLE = {
27
- checkbox: "checkbox",
28
- radio: "radio",
29
- range: "slider",
30
- number: "spinbutton",
31
- submit: "button",
32
- button: "button",
33
- reset: "button",
34
- search: "searchbox"
35
- };
36
- function attr(el, name) {
37
- const v = el.getAttribute(name);
38
- return v == null || v === "" ? void 0 : v;
39
- }
40
- function tagOf(el) {
41
- return el.tagName.toLowerCase();
42
- }
43
- function roleOf(el) {
44
- var _INPUT_ROLE$toLowerCa, _TAG_ROLE$tag;
45
- const explicit = attr(el, "role");
46
- if (explicit) return explicit;
47
- const tag = tagOf(el);
48
- if (tag === "a") return attr(el, "href") != null ? "link" : "generic";
49
- if (tag === "input") return (_INPUT_ROLE$toLowerCa = INPUT_ROLE[(attr(el, "type") || "text").toLowerCase()]) !== null && _INPUT_ROLE$toLowerCa !== void 0 ? _INPUT_ROLE$toLowerCa : "textbox";
50
- if (/^h[1-6]$/.test(tag)) return "heading";
51
- return (_TAG_ROLE$tag = TAG_ROLE[tag]) !== null && _TAG_ROLE$tag !== void 0 ? _TAG_ROLE$tag : "generic";
52
- }
53
- function clip(s) {
54
- if (!s) return void 0;
55
- const t = s.replace(/\s+/g, " ").trim();
56
- if (!t) return void 0;
57
- return t.length > MAX_NAME ? t.slice(0, MAX_NAME) + "…" : t;
58
- }
59
- function accessibleName(el) {
60
- const label = attr(el, "aria-label");
61
- if (label) return clip(label);
62
- const labelledby = attr(el, "aria-labelledby");
63
- if (labelledby && typeof document !== "undefined") {
64
- const c = clip(labelledby.split(/\s+/).map((id) => {
65
- var _document$getElementB;
66
- return ((_document$getElementB = document.getElementById(id)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.textContent) || "";
67
- }).join(" "));
68
- if (c) return c;
69
- }
70
- const tag = tagOf(el);
71
- if (tag === "img") return clip(attr(el, "alt"));
72
- if (tag === "input" || tag === "textarea" || tag === "select") {
73
- if (el.id && typeof document !== "undefined") {
74
- const forLabel = document.querySelector(`label[for="${cssEscape(el.id)}"]`);
75
- const c = clip(forLabel === null || forLabel === void 0 ? void 0 : forLabel.textContent);
76
- if (c) return c;
77
- }
78
- return clip(attr(el, "placeholder") || attr(el, "name") || attr(el, "title"));
79
- }
80
- const title = attr(el, "title");
81
- if (title) return clip(title);
82
- const role = roleOf(el);
83
- if (role === "button" || role === "link" || role === "heading" || role === "listitem") return clip(el.textContent);
84
- }
85
- function cssEscape(s) {
86
- var _g$CSS;
87
- const g = typeof globalThis !== "undefined" ? globalThis : void 0;
88
- if (g === null || g === void 0 || (_g$CSS = g.CSS) === null || _g$CSS === void 0 ? void 0 : _g$CSS.escape) return g.CSS.escape(s);
89
- return s.replace(/["\\\]]/g, "\\$&");
90
- }
91
- function componentName(el) {
92
- const marked = attr(el, "data-hz-name") || attr(el, "data-component");
93
- if (marked) return clip(marked);
94
- const stamped = attr(el, "data-observe");
95
- if (stamped && stamped !== "off") return clip(stamped);
96
- return reactOwner(el);
97
- }
98
- function reactOwner(el) {
99
- try {
100
- var _holder$key;
101
- const holder = el;
102
- const key = Object.keys(holder).find((k) => k.startsWith("__reactFiber$") || k.startsWith("__reactInternalInstance$"));
103
- if (!key) return void 0;
104
- let owner = (_holder$key = holder[key]) === null || _holder$key === void 0 ? void 0 : _holder$key._debugOwner;
105
- let hops = 0;
106
- while (owner && hops < 20) {
107
- const t = owner.type;
108
- const n = (t === null || t === void 0 ? void 0 : t.displayName) || (t === null || t === void 0 ? void 0 : t.name);
109
- if (n && /^[A-Z]/.test(n)) return n;
110
- owner = owner._debugOwner;
111
- hops++;
112
- }
113
- } catch (_unused) {}
114
- }
115
- function describe(el) {
116
- const tag = tagOf(el);
117
- const role = roleOf(el);
118
- const node = {
119
- tag,
120
- role
121
- };
122
- const testid = attr(el, "data-testid") || attr(el, "data-test-id") || attr(el, "data-test");
123
- if (testid) node.testid = testid;
124
- if (el.id) node.id = el.id;
125
- const name = accessibleName(el);
126
- if (name) node.name = name;
127
- const kind = subKind(el, tag, role);
128
- if (kind) node.kind = kind;
129
- const component = componentName(el);
130
- if (component) node.component = component;
131
- return node;
132
- }
133
- function subKind(el, tag, role) {
134
- if (tag === "input") return (attr(el, "type") || "text").toLowerCase();
135
- if (tag === "button") return attr(el, "type") || void 0;
136
- if (tag === "a") {
137
- const href = attr(el, "href");
138
- if (!href) return void 0;
139
- try {
140
- return new URL(href, typeof location !== "undefined" ? location.href : "https://x").pathname;
141
- } catch (_unused2) {
142
- return href;
143
- }
144
- }
145
- if (role === "heading") return el.tagName.toLowerCase();
146
- }
147
- function significant(n) {
148
- return Boolean(n.component || n.testid || n.role && n.role !== "generic" || n.name);
149
- }
150
- function labelOf(n) {
151
- if (n.component) return n.component;
152
- const base = n.role && n.role !== "generic" ? n.role : n.tag;
153
- if (n.testid) return `${base}[${n.testid}]`;
154
- if (n.name) return `${base}[${n.name}]`;
155
- return base;
156
- }
157
- function labelFor(path) {
158
- const trail = path.filter(significant);
159
- return (trail.length ? trail : path.length ? [path[path.length - 1]] : []).map(labelOf).join("/");
160
- }
161
- function annotate(el, opts = {}) {
162
- var _opts$maxDepth;
163
- const maxDepth = (_opts$maxDepth = opts.maxDepth) !== null && _opts$maxDepth !== void 0 ? _opts$maxDepth : 12;
164
- const path = [];
165
- let cur = el;
166
- let depth = 0;
167
- const docEl = typeof document !== "undefined" ? document.documentElement : null;
168
- while (cur && cur.nodeType === 1 && cur !== docEl && depth < maxDepth) {
169
- path.unshift(describe(cur));
170
- cur = cur.parentElement;
171
- depth++;
172
- }
173
- const target = path.length ? path[path.length - 1] : describe(el);
174
- return {
175
- "@context": CONTEXT,
176
- "@type": "Interaction",
177
- path,
178
- target,
179
- label: labelFor(path.length ? path : [target])
180
- };
181
- }
182
- var MAX_VALUE = 64;
183
- var SENSITIVE_TYPE = /* @__PURE__ */ new Set([
184
- "password",
185
- "hidden",
186
- "email",
187
- "tel"
188
- ]);
189
- var SENSITIVE_RE = /pass|pwd|secret|token|otp|cvv|cvc|csc|cc-|card|ccnum|credit|ssn|social|routing|account|pin|auth|api[-_ ]?key|security|dob|birth/i;
190
- var PRIVATE_DEFAULT = "data-hz-private";
191
- function attr2(el, name) {
192
- return el.getAttribute(name);
193
- }
194
- function isPrivate(el, policy = {}) {
195
- var _policy$privateAttrib;
196
- const flag = (_policy$privateAttrib = policy.privateAttribute) !== null && _policy$privateAttrib !== void 0 ? _policy$privateAttrib : PRIVATE_DEFAULT;
197
- let cur = el;
198
- while (cur && cur.nodeType === 1) {
199
- if (cur.hasAttribute(flag)) return true;
200
- if (cur.getAttribute("data-observe") === "off") return true;
201
- if (cur.hasAttribute("data-private")) return true;
202
- cur = cur.parentElement;
203
- }
204
- return false;
205
- }
206
- function fieldKey(el) {
207
- return [
208
- attr2(el, "name"),
209
- el.id || null,
210
- attr2(el, "autocomplete"),
211
- attr2(el, "placeholder"),
212
- attr2(el, "aria-label")
213
- ].filter(Boolean).join(" ");
214
- }
215
- function sensitiveKey(text, policy = {}) {
216
- if (SENSITIVE_RE.test(text)) return true;
217
- if (policy.sensitive && policy.sensitive.test(text)) return true;
218
- return false;
219
- }
220
- function isSensitive(el, type, policy) {
221
- if (SENSITIVE_TYPE.has(type)) return true;
222
- return sensitiveKey(fieldKey(el), policy);
223
- }
224
- function clip2(s) {
225
- return s.length > MAX_VALUE ? s.slice(0, MAX_VALUE) + "…" : s;
226
- }
227
- function redactValue(el, policy = {}) {
228
- var _el$value;
229
- const tag = el.tagName.toLowerCase();
230
- if (tag !== "input" && tag !== "textarea" && tag !== "select") return void 0;
231
- if (tag === "select") {
232
- const s = el;
233
- const opt = s.options[s.selectedIndex];
234
- return {
235
- redacted: false,
236
- kind: "select",
237
- value: opt ? clip2((opt.text || "").trim()) : void 0
238
- };
239
- }
240
- const type = (tag === "textarea" ? "textarea" : attr2(el, "type") || "text").toLowerCase();
241
- if (type === "checkbox" || type === "radio") return {
242
- redacted: false,
243
- kind: type,
244
- checked: el.checked
245
- };
246
- const raw = (_el$value = el.value) !== null && _el$value !== void 0 ? _el$value : "";
247
- const sensitive = isSensitive(el, type, policy);
248
- const mask = policy.maskInput !== false;
249
- if (sensitive) return {
250
- redacted: true,
251
- kind: type
252
- };
253
- if (mask) return {
254
- redacted: true,
255
- kind: type,
256
- length: raw.length
257
- };
258
- return {
259
- redacted: false,
260
- kind: type,
261
- value: clip2(raw)
262
- };
263
- }
264
- var Stream = class {
265
- constructor(capacity = 500) {
266
- this.capacity = capacity;
267
- this.subs = /* @__PURE__ */ new Set();
268
- this.ring = [];
269
- }
270
- /** Push a value: append to the bounded buffer, then notify every subscriber. */
271
- emit(value) {
272
- this.ring.push(value);
273
- if (this.ring.length > this.capacity) this.ring.splice(0, this.ring.length - this.capacity);
274
- for (const fn of this.subs) try {
275
- fn(value);
276
- } catch (_unused3) {}
277
- }
278
- /** Subscribe to future values. Returns an unsubscribe function. */
279
- subscribe(fn) {
280
- this.subs.add(fn);
281
- return () => {
282
- this.subs.delete(fn);
283
- };
284
- }
285
- /** A snapshot of the retained history (oldest→newest). */
286
- buffer() {
287
- return this.ring.slice();
288
- }
289
- /** Drop retained history. */
290
- clear() {
291
- this.ring = [];
292
- }
293
- };
294
- var isBrowser = () => typeof window !== "undefined" && typeof document !== "undefined";
295
- var NAME = {
296
- click: "$click",
297
- input: "$input",
298
- change: "$change",
299
- submit: "$submit",
300
- nav: "$pageview",
301
- view: "$view"
302
- };
303
- var HISTORY_EVENT = "hz:navigate";
304
- var histRefs = 0;
305
- var histOriginals = null;
306
- function installHistory() {
307
- if (!isBrowser()) return;
308
- histRefs++;
309
- if (histOriginals) return;
310
- const push = history.pushState;
311
- const replace = history.replaceState;
312
- histOriginals = {
313
- push,
314
- replace
315
- };
316
- const fire = () => {
317
- try {
318
- window.dispatchEvent(new Event(HISTORY_EVENT));
319
- } catch (_unused4) {}
320
- };
321
- history.pushState = function(...args) {
322
- const r = push.apply(this, args);
323
- fire();
324
- return r;
325
- };
326
- history.replaceState = function(...args) {
327
- const r = replace.apply(this, args);
328
- fire();
329
- return r;
330
- };
331
- }
332
- function uninstallHistory() {
333
- if (histRefs > 0) histRefs--;
334
- if (histRefs === 0 && histOriginals) {
335
- history.pushState = histOriginals.push;
336
- history.replaceState = histOriginals.replace;
337
- histOriginals = null;
338
- }
339
- }
340
- function elementOf(target) {
341
- if (target && target.nodeType === 1) return target;
342
- if (target && target.nodeType === 3) return target.parentElement;
343
- return null;
344
- }
345
- var FIXED_DEPTH = 12;
346
- function isFixed(el) {
347
- for (let n = el, d = 0; n && d < FIXED_DEPTH; n = n.parentElement, d++) {
348
- const p = getComputedStyle(n).position;
349
- if (p === "fixed" || p === "sticky") return true;
350
- }
351
- return false;
352
- }
353
- function positionOf(e, el) {
354
- const m = e;
355
- if (typeof m.clientX !== "number" || typeof m.clientY !== "number") return void 0;
356
- try {
357
- const fixed = isFixed(el);
358
- return {
359
- $x: Math.round(m.clientX + (fixed ? 0 : window.scrollX)),
360
- $y: Math.round(m.clientY + (fixed ? 0 : window.scrollY)),
361
- $target_fixed: fixed,
362
- $viewport_width: window.innerWidth,
363
- $viewport_height: window.innerHeight
364
- };
365
- } catch (_unused5) {
366
- return;
367
- }
368
- }
369
- var Observer = class {
370
- constructor(config) {
371
- var _config$root, _config$bufferSize;
372
- this.started = false;
373
- this.seen = /* @__PURE__ */ new WeakSet();
374
- this.onClick = (e) => {
375
- const el = elementOf(e.target);
376
- this.fire("click", el, positionOf(e, el));
377
- };
378
- this.onInput = (e) => {
379
- const el = elementOf(e.target);
380
- if (!el) return;
381
- if (this.pending) clearTimeout(this.pending.t);
382
- this.pending = {
383
- el,
384
- t: setTimeout(() => {
385
- this.pending = void 0;
386
- this.fire("input", el);
387
- }, this.cfg.inputDebounceMs)
388
- };
389
- };
390
- this.onChange = (e) => {
391
- if (this.pending) {
392
- clearTimeout(this.pending.t);
393
- this.pending = void 0;
394
- }
395
- this.fire("change", elementOf(e.target));
396
- };
397
- this.onSubmit = (e) => this.fire("submit", elementOf(e.target));
398
- this.onNav = () => {
399
- if (!isBrowser()) return;
400
- this.fire("nav", document.body, { path: location.pathname + location.search });
401
- };
402
- this.cfg = require_objectSpread2._objectSpread2({
403
- enabled: true,
404
- nav: true,
405
- viewSelector: "[data-hz-view]",
406
- inputDebounceMs: 400,
407
- maxDepth: 12
408
- }, config);
409
- this.root = (_config$root = config.root) !== null && _config$root !== void 0 ? _config$root : isBrowser() ? document : {};
410
- this.stream = new Stream((_config$bufferSize = config.bufferSize) !== null && _config$bufferSize !== void 0 ? _config$bufferSize : 500);
411
- }
412
- /** Install listeners. Idempotent and browser-only. */
413
- start() {
414
- if (this.started || !this.cfg.enabled || !isBrowser()) return;
415
- this.started = true;
416
- const r = this.root;
417
- r.addEventListener("click", this.onClick, {
418
- capture: true,
419
- passive: true
420
- });
421
- r.addEventListener("input", this.onInput, {
422
- capture: true,
423
- passive: true
424
- });
425
- r.addEventListener("change", this.onChange, {
426
- capture: true,
427
- passive: true
428
- });
429
- r.addEventListener("submit", this.onSubmit, {
430
- capture: true,
431
- passive: true
432
- });
433
- if (this.cfg.nav) {
434
- installHistory();
435
- window.addEventListener("popstate", this.onNav);
436
- window.addEventListener(HISTORY_EVENT, this.onNav);
437
- }
438
- this.installView();
439
- }
440
- /** Remove listeners and release resources. Idempotent. */
441
- stop() {
442
- var _this$io;
443
- if (!this.started) return;
444
- this.started = false;
445
- const r = this.root;
446
- r.removeEventListener("click", this.onClick, { capture: true });
447
- r.removeEventListener("input", this.onInput, { capture: true });
448
- r.removeEventListener("change", this.onChange, { capture: true });
449
- r.removeEventListener("submit", this.onSubmit, { capture: true });
450
- if (this.cfg.nav) {
451
- window.removeEventListener("popstate", this.onNav);
452
- window.removeEventListener(HISTORY_EVENT, this.onNav);
453
- uninstallHistory();
454
- }
455
- if (this.pending) {
456
- clearTimeout(this.pending.t);
457
- this.pending = void 0;
458
- }
459
- (_this$io = this.io) === null || _this$io === void 0 || _this$io.disconnect();
460
- this.io = void 0;
461
- }
462
- /** Watch an element for visibility ($view) — for nodes marked after start()
463
- * (e.g. by a framework binding). No-op when visibility capture is unavailable. */
464
- watch(el) {
465
- try {
466
- var _this$io2;
467
- (_this$io2 = this.io) === null || _this$io2 === void 0 || _this$io2.observe(el);
468
- } catch (_unused6) {}
469
- }
470
- installView() {
471
- if (typeof IntersectionObserver === "undefined") return;
472
- try {
473
- var _this$root$querySelec, _this$root;
474
- this.io = new IntersectionObserver((entries) => {
475
- for (const entry of entries) {
476
- if (!entry.isIntersecting) continue;
477
- const el = entry.target;
478
- if (this.seen.has(el)) continue;
479
- this.seen.add(el);
480
- this.fire("view", el, { ratio: Math.round(entry.intersectionRatio * 100) / 100 });
481
- }
482
- }, { threshold: .5 });
483
- const sel = this.cfg.viewSelector;
484
- if (sel) (_this$root$querySelec = (_this$root = this.root).querySelectorAll) === null || _this$root$querySelec === void 0 || _this$root$querySelec.call(_this$root, sel).forEach((el) => this.io.observe(el));
485
- } catch (_unused7) {}
486
- }
487
- /** Build and dispatch an Interaction. The single choke point; fully guarded. */
488
- fire(kind, el, props) {
489
- if (!this.cfg.enabled) return;
490
- try {
491
- if (!el || isPrivate(el, this.cfg.redaction)) return;
492
- const semantic = annotate(el, { maxDepth: this.cfg.maxDepth });
493
- const value = kind === "input" || kind === "change" ? redactValue(el, this.cfg.redaction) : void 0;
494
- const interaction = {
495
- kind,
496
- name: NAME[kind],
497
- at: Date.now(),
498
- semantic,
499
- value,
500
- props
501
- };
502
- this.stream.emit(interaction);
503
- this.cfg.sink(interaction);
504
- } catch (_unused8) {}
505
- }
506
- };
507
- function wireProps(i) {
508
- const t = i.semantic.target;
509
- const props = {
510
- $el: i.semantic.label,
511
- $role: t.role
512
- };
513
- if (t.testid) props.$testid = t.testid;
514
- if (t.name) props.$name = t.name;
515
- if (t.component) props.$component = t.component;
516
- if (t.kind) props.$kind = t.kind;
517
- props.$path = i.semantic.path.map((n) => n.component || (n.testid ? `${n.role}[${n.testid}]` : n.role));
518
- if (i.value) props.$value = i.value;
519
- if (i.props) Object.assign(props, i.props);
520
- return props;
521
- }
522
- function observe(sink, config) {
523
- const engine = new Observer(require_objectSpread2._objectSpread2({ sink }, config));
524
- engine.start();
525
- return engine;
526
- }
527
- //#endregion
528
- exports.Observer = Observer;
529
- exports.Stream = Stream;
530
- exports.accessibleName = accessibleName;
531
- exports.annotate = annotate;
532
- exports.componentName = componentName;
533
- exports.describe = describe;
534
- exports.isPrivate = isPrivate;
535
- exports.labelFor = labelFor;
536
- exports.observe = observe;
537
- exports.redactValue = redactValue;
538
- exports.roleOf = roleOf;
539
- exports.sensitiveKey = sensitiveKey;
540
- exports.wireProps = wireProps;
@@ -1,55 +0,0 @@
1
- import { createGui as createGuiCore } from "@hanzogui/core";
2
- const createGui = process.env.NODE_ENV !== "development" ? createGuiCore : conf => {
3
- const sizeTokenKeys = ["$true"];
4
- const hasKeys = (expectedKeys, obj) => {
5
- return expectedKeys.every(k => typeof obj[k] !== "undefined");
6
- };
7
- const hanzoguiConfig = createGuiCore(conf);
8
- for (const name of ["size", "space"]) {
9
- const tokenSet = hanzoguiConfig.tokensParsed[name];
10
- if (!tokenSet) {
11
- throw new Error(`Expected tokens for "${name}" in ${Object.keys(hanzoguiConfig.tokensParsed).join(", ")}`);
12
- }
13
- if (!hasKeys(sizeTokenKeys, tokenSet)) {
14
- throw new Error(`
15
- createGui() missing expected tokens.${name}:
16
-
17
- Received: ${Object.keys(tokenSet).join(", ")}
18
-
19
- Expected: ${sizeTokenKeys.join(", ")}
20
-
21
- Gui expects a "true" key that is the same value as your default size. This is so
22
- it can size things up or down from the defaults without assuming which keys you use.
23
-
24
- Please define a "true" or "$true" key on your size and space tokens like so (example):
25
-
26
- size: {
27
- sm: 2,
28
- md: 10,
29
- true: 10, // this means "md" is your default size
30
- lg: 20,
31
- }
32
-
33
- `);
34
- }
35
- }
36
- const expected = Object.keys(hanzoguiConfig.tokensParsed.size);
37
- for (const name of ["radius", "zIndex"]) {
38
- const tokenSet = hanzoguiConfig.tokensParsed[name];
39
- const received = Object.keys(tokenSet);
40
- const hasSomeOverlap = received.some(rk => expected.includes(rk));
41
- if (!hasSomeOverlap) {
42
- throw new Error(`
43
- createGui() invalid tokens.${name}:
44
-
45
- Received: ${received.join(", ")}
46
-
47
- Expected a subset of: ${expected.join(", ")}
48
-
49
- `);
50
- }
51
- }
52
- return hanzoguiConfig;
53
- };
54
- export { createGui };
55
- //# sourceMappingURL=createGui.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createGui","createGuiCore","process","env","NODE_ENV","conf","sizeTokenKeys","hasKeys","expectedKeys","obj","every","k","hanzoguiConfig","name","tokenSet","tokensParsed","Error","Object","keys","join","expected","size","received","hasSomeOverlap","some","rk","includes"],"sources":["../../src/createGui.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,IAAaC,aAAA,QAAqB;AAMpC,MAAMD,SAAA,GACXE,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,gBACrBH,aAAA,GACCI,IAAA,IAAS;EACR,MAAMC,aAAA,GAAgB,CAAC,OAAO;EAE9B,MAAMC,OAAA,GAAUA,CAACC,YAAA,EAAwBC,GAAA,KAA0B;IACjE,OAAOD,YAAA,CAAaE,KAAA,CAAOC,CAAA,IAAM,OAAOF,GAAA,CAAIE,CAAC,MAAM,WAAW;EAChE;EAEA,MAAMC,cAAA,GAAiBX,aAAA,CAAcI,IAAI;EAGzC,WAAWQ,IAAA,IAAQ,CAAC,QAAQ,OAAO,GAAY;IAC7C,MAAMC,QAAA,GAAWF,cAAA,CAAeG,YAAA,CAAaF,IAAI;IACjD,IAAI,CAACC,QAAA,EAAU;MACb,MAAM,IAAIE,KAAA,CACR,wBAAwBH,IAAI,QAAQI,MAAA,CAAOC,IAAA,CACzCN,cAAA,CAAeG,YACjB,EAAEI,IAAA,CAAK,IAAI,CAAC,EACd;IACF;IACA,IAAI,CAACZ,OAAA,CAAQD,aAAA,EAAeQ,QAAQ,GAAG;MACrC,MAAM,IAAIE,KAAA,CAAM;AAAA,sCACUH,IAAI;AAAA;AAAA,YAE9BI,MAAA,CAAOC,IAAA,CAAKJ,QAAQ,EAAEK,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,YAEhCb,aAAA,CAAca,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAcnC;IACS;EACF;EAGA,MAAMC,QAAA,GAAWH,MAAA,CAAOC,IAAA,CAAKN,cAAA,CAAeG,YAAA,CAAaM,IAAI;EAC7D,WAAWR,IAAA,IAAQ,CAAC,UAAU,QAAQ,GAAY;IAChD,MAAMC,QAAA,GAAWF,cAAA,CAAeG,YAAA,CAAaF,IAAI;IACjD,MAAMS,QAAA,GAAWL,MAAA,CAAOC,IAAA,CAAKJ,QAAQ;IACrC,MAAMS,cAAA,GAAiBD,QAAA,CAASE,IAAA,CAAMC,EAAA,IAAOL,QAAA,CAASM,QAAA,CAASD,EAAE,CAAC;IAClE,IAAI,CAACF,cAAA,EAAgB;MACnB,MAAM,IAAIP,KAAA,CAAM;AAAA,6BACCH,IAAI;AAAA;AAAA,YAErBS,QAAA,CAASH,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,wBAEPC,QAAA,CAASD,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,CAE1C;IACS;EACF;EAEA,OAAOP,cAAA;AACT","ignoreList":[]}
@@ -1,61 +0,0 @@
1
- import { createGui as createGuiCore } from "@hanzogui/core";
2
- var createGui = process.env.NODE_ENV !== "development" ? createGuiCore : function (conf) {
3
- var sizeTokenKeys = ["$true"];
4
- var hasKeys = function (expectedKeys, obj) {
5
- return expectedKeys.every(function (k) {
6
- return typeof obj[k] !== "undefined";
7
- });
8
- };
9
- var hanzoguiConfig = createGuiCore(conf);
10
- for (var _i = 0, _iter = ["size", "space"]; _i < _iter.length; _i++) {
11
- var name = _iter[_i];
12
- var tokenSet = hanzoguiConfig.tokensParsed[name];
13
- if (!tokenSet) {
14
- throw new Error(`Expected tokens for "${name}" in ${Object.keys(hanzoguiConfig.tokensParsed).join(", ")}`);
15
- }
16
- if (!hasKeys(sizeTokenKeys, tokenSet)) {
17
- throw new Error(`
18
- createGui() missing expected tokens.${name}:
19
-
20
- Received: ${Object.keys(tokenSet).join(", ")}
21
-
22
- Expected: ${sizeTokenKeys.join(", ")}
23
-
24
- Gui expects a "true" key that is the same value as your default size. This is so
25
- it can size things up or down from the defaults without assuming which keys you use.
26
-
27
- Please define a "true" or "$true" key on your size and space tokens like so (example):
28
-
29
- size: {
30
- sm: 2,
31
- md: 10,
32
- true: 10, // this means "md" is your default size
33
- lg: 20,
34
- }
35
-
36
- `);
37
- }
38
- }
39
- var expected = Object.keys(hanzoguiConfig.tokensParsed.size);
40
- for (var _i1 = 0, _iter1 = ["radius", "zIndex"]; _i1 < _iter1.length; _i1++) {
41
- var name1 = _iter1[_i1];
42
- var tokenSet1 = hanzoguiConfig.tokensParsed[name1];
43
- var received = Object.keys(tokenSet1);
44
- var hasSomeOverlap = received.some(function (rk) {
45
- return expected.includes(rk);
46
- });
47
- if (!hasSomeOverlap) {
48
- throw new Error(`
49
- createGui() invalid tokens.${name1}:
50
-
51
- Received: ${received.join(", ")}
52
-
53
- Expected a subset of: ${expected.join(", ")}
54
-
55
- `);
56
- }
57
- }
58
- return hanzoguiConfig;
59
- };
60
- export { createGui };
61
- //# sourceMappingURL=createGui.native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createGui","createGuiCore","process","env","NODE_ENV","conf","sizeTokenKeys","hasKeys","expectedKeys","obj","every","k","hanzoguiConfig","_i","_iter","length","name","tokenSet","tokensParsed","Error","Object","keys","join","expected","size","_i1","_iter1","name1","tokenSet1","received","hasSomeOverlap","some","rk","includes"],"sources":["../../src/createGui.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,IAAaC,aAAA,QAAqB;AAMpC,IAAAD,SAAM,GAAAE,OACX,CAAAC,GAAQ,CAAAC,QAAI,kBAAa,GAAAH,aACrB,aACCI,IAAS;EACR,IAAAC,aAAM,IAEN,OAAM,CACJ;EACF,IAAAC,OAAA,YAAAA,CAAAC,YAAA,EAAAC,GAAA;IAEA,OAAMD,YAAA,CAAAE,KAAiB,WAAcC,CAAA;MAGrC,OAAW,OAAAF,GAAS,CAAAE,CAAA,MAAQ,WAAmB;IAC7C;EACA;EACE,IAAAC,cAAU,GAAAX,aAAA,CAAAI,IAAA;EAAA,SACRQ,EAAA,MAAAC,KAAA,IAA2C,MACzC,EAAe,OACf,CAAU,EAAAD,EACd,GAAAC,KAAA,CAAAC,MAAA,EAAAF,EAAA;IACF,IAAAG,IAAA,GAAAF,KAAA,CAAAD,EAAA;IACA,IAAII,QAAC,GAAQL,cAAe,CAAAM,YAAW,CAAAF,IAAA;IACrC,KAAAC,QAAU;MAAM,UAAAE,KAAA,yBACcH,IAAA,QAAAI,MAAA,CAAAC,IAAA,CAAAT,cAAA,CAAAM,YAAA,EAAAI,IAAA;IAAA;IAAA,KAAAf,OAE9B,CAAAD,aAAY,EAAQW,QAAO,GAAI;MAAC,UAAAE,KAAA;AAAA,sCAERH,IAAA;AAAA;AAAA,YAAAI,MAAA,CAAAC,IAAA,CAAAJ,QAAA,EAAAK,IAAA;AAAA;AAAA,YAAAhB,aAAA,CAAAgB,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcnC;AACS;AAIF;AACA;IACE;EACA;EACA,IAAAC,QAAM,GAAAH,MAAA,CAAAC,IAAiB,CAAAT,cAAe,CAAAM,YAAO,CAAAM,IAAS;EACtD,SAAKC,GAAA,MAAAC,MAAgB,IACnB,QAAM,EAAU,SACK,EAAAD,GAAA,GAAAC,MAAA,CAAAX,MAAA,EAAAU,GAAA;IAAA,IAAAE,KAErB,GAAAD,MAAS,CAAAD,GAAK;IAAK,IAAAG,SAAA,GAAAhB,cAAA,CAAAM,YAAA,CAAAS,KAAA;IAAA,IAAAE,QAAA,GAAAT,MAEP,CAAAC,IAAA,CAAAO,SAAc;IAAK,IAAAE,cAAA,GAAAD,QAAA,CAAAE,IAAA,WAAAC,EAAA;MAE1C,OAAAT,QAAA,CAAAU,QAAA,CAAAD,EAAA;IACS;IACF,KAAAF,cAAA;MAEA,MAAO,IAAAX,KAAA;AACT,6BAAAQ,KAAA","ignoreList":[]}