@geajs/ui 0.2.9 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bind.mjs +74 -35
- package/dist/bind.mjs.map +1 -1
- package/dist/combobox.mjs +74 -6
- package/dist/combobox.mjs.map +1 -1
- package/dist/compiled-component.mjs +11 -9
- package/dist/compiled-component.mjs.map +1 -1
- package/dist/compiled-reactive-component.mjs +129 -31
- package/dist/compiled-reactive-component.mjs.map +1 -1
- package/dist/component-id.mjs +12 -1
- package/dist/component-id.mjs.map +1 -1
- package/dist/conditional.mjs.map +1 -1
- package/dist/delegate-event.mjs +9 -9
- package/dist/delegate-event.mjs.map +1 -1
- package/dist/disposer.mjs +30 -11
- package/dist/disposer.mjs.map +1 -1
- package/dist/draggable2.mjs +135 -32
- package/dist/draggable2.mjs.map +1 -1
- package/dist/file-upload.mjs +74 -6
- package/dist/file-upload.mjs.map +1 -1
- package/dist/hover-card.mjs +2 -2
- package/dist/hover-card.mjs.map +1 -1
- package/dist/input2.mjs +2 -2
- package/dist/input2.mjs.map +1 -1
- package/dist/item-obs.mjs +11 -48
- package/dist/item-obs.mjs.map +1 -1
- package/dist/keyed-list.mjs +90 -39
- package/dist/keyed-list.mjs.map +1 -1
- package/dist/menu.mjs +7 -7
- package/dist/menu.mjs.map +1 -1
- package/dist/pin-input.mjs +6 -6
- package/dist/pin-input.mjs.map +1 -1
- package/dist/progress.mjs +2 -2
- package/dist/progress.mjs.map +1 -1
- package/dist/rating-group.mjs +8 -8
- package/dist/rating-group.mjs.map +1 -1
- package/dist/reactive-attr.mjs +2 -2
- package/dist/reactive-attr.mjs.map +1 -1
- package/dist/reactive-bool.mjs +2 -2
- package/dist/reactive-bool.mjs.map +1 -1
- package/dist/reactive-class-name.mjs +2 -2
- package/dist/reactive-class-name.mjs.map +1 -1
- package/dist/reactive-class.mjs +5 -4
- package/dist/reactive-class.mjs.map +1 -1
- package/dist/reactive-style.mjs +15 -12
- package/dist/reactive-style.mjs.map +1 -1
- package/dist/reactive-text.mjs +4 -4
- package/dist/reactive-text.mjs.map +1 -1
- package/dist/tags-input.mjs +10 -10
- package/dist/tags-input.mjs.map +1 -1
- package/dist/tooltip.mjs +3 -3
- package/dist/tooltip.mjs.map +1 -1
- package/dist/zag-component.d.mts +1 -0
- package/dist/zag-component.mjs +10 -1
- package/dist/zag-component.mjs.map +1 -1
- package/package.json +1 -1
package/dist/bind.mjs
CHANGED
|
@@ -13,22 +13,44 @@ const GEA_CREATE_TEMPLATE = Symbol.for("gea.component.createTemplate");
|
|
|
13
13
|
const GEA_ON_PROP_CHANGE = Symbol.for("gea.onPropChange");
|
|
14
14
|
//#endregion
|
|
15
15
|
//#region ../gea/src/runtime/subscribe.ts
|
|
16
|
+
function isObservable(x) {
|
|
17
|
+
return typeof x.observe === "function";
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* `root`'s real type at every call site is concrete (a component's `this`, a
|
|
21
|
+
* nested store, ...), so it's `object` here rather than `any` — but
|
|
22
|
+
* `subscribe` itself can't resolve *which* nested object along `path` ends up
|
|
23
|
+
* observed: that's chosen by walking `path` at runtime and testing each
|
|
24
|
+
* segment for its own `.observe` method (a decision no static structural type
|
|
25
|
+
* over `root` can predict, since `path`'s length isn't fixed). `V` is
|
|
26
|
+
* therefore supplied by the caller's own `fn`, the same way
|
|
27
|
+
* `EventEmitter#on<T>(name, fn: (arg: T) => void)` lets the caller's
|
|
28
|
+
* callback pin the type rather than the emitter deriving it.
|
|
29
|
+
*/
|
|
16
30
|
function subscribe(root, path, fn) {
|
|
17
31
|
if (!root) return () => {};
|
|
18
32
|
let r = root;
|
|
19
33
|
let p = path;
|
|
20
34
|
while (p.length > 1) {
|
|
21
35
|
const head = p[0];
|
|
22
|
-
const next = r
|
|
23
|
-
if (!next || typeof next
|
|
36
|
+
const next = r[head];
|
|
37
|
+
if (!next || typeof next !== "object" || !isObservable(next)) break;
|
|
24
38
|
r = next;
|
|
25
39
|
p = p.slice(1);
|
|
26
40
|
}
|
|
27
|
-
if (!r
|
|
28
|
-
|
|
29
|
-
return r.observe(
|
|
41
|
+
if (!isObservable(r)) return () => {};
|
|
42
|
+
const handler = fn;
|
|
43
|
+
if (p.length === 0) return r.observe("", handler);
|
|
44
|
+
if (p.length === 1) return r.observe(p[0], handler);
|
|
45
|
+
return r.observe(p, handler);
|
|
30
46
|
}
|
|
31
|
-
/** Resolve a path against the root proxy; returns `undefined` on null holes.
|
|
47
|
+
/** Resolve a path against the root proxy; returns `undefined` on null holes.
|
|
48
|
+
*
|
|
49
|
+
* `V` defaults to `unknown` (not forced) — the same genuinely dynamic
|
|
50
|
+
* boundary as `JSON.parse`: reading an arbitrary-length path out of an
|
|
51
|
+
* arbitrary-shaped root, with no way to derive the result type structurally.
|
|
52
|
+
* Callers that know what they're reading supply `V` explicitly.
|
|
53
|
+
*/
|
|
32
54
|
function readPath(root, path) {
|
|
33
55
|
if (!root) return void 0;
|
|
34
56
|
let v = root;
|
|
@@ -40,67 +62,75 @@ function readPath(root, path) {
|
|
|
40
62
|
}
|
|
41
63
|
//#endregion
|
|
42
64
|
//#region ../gea/src/runtime/with-tracking.ts
|
|
43
|
-
let
|
|
65
|
+
let _activeRoots = null;
|
|
66
|
+
let _activeProps = null;
|
|
44
67
|
let _recursing = false;
|
|
45
68
|
/** Record a tracking read. Called by store.ts proxy traps. */
|
|
46
69
|
function trackRead(storeRoot, prop) {
|
|
47
|
-
if (!
|
|
70
|
+
if (!_activeRoots || !_activeProps || _recursing) return;
|
|
48
71
|
if (typeof prop !== "string") return;
|
|
49
72
|
_recursing = true;
|
|
50
73
|
try {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
74
|
+
const roots = _activeRoots;
|
|
75
|
+
const props = _activeProps;
|
|
76
|
+
for (let i = 0; i < roots.length; i++) if (roots[i] === storeRoot && props[i] === prop) return;
|
|
77
|
+
roots.push(storeRoot);
|
|
78
|
+
props.push(prop);
|
|
57
79
|
} finally {
|
|
58
80
|
_recursing = false;
|
|
59
81
|
}
|
|
60
82
|
}
|
|
61
83
|
/** Suppress tracking for `fn`. */
|
|
62
84
|
function untrack(fn) {
|
|
63
|
-
const
|
|
64
|
-
|
|
85
|
+
const prevRoots = _activeRoots;
|
|
86
|
+
const prevProps = _activeProps;
|
|
87
|
+
_activeRoots = null;
|
|
88
|
+
_activeProps = null;
|
|
65
89
|
try {
|
|
66
90
|
return fn();
|
|
67
91
|
} finally {
|
|
68
|
-
|
|
92
|
+
_activeRoots = prevRoots;
|
|
93
|
+
_activeProps = prevProps;
|
|
69
94
|
}
|
|
70
95
|
}
|
|
71
|
-
function _depsEqual(
|
|
72
|
-
if (
|
|
73
|
-
for (let i = 0; i <
|
|
96
|
+
function _depsEqual(aRoots, aProps, bRoots, bProps) {
|
|
97
|
+
if (aRoots.length !== bRoots.length) return false;
|
|
98
|
+
for (let i = 0; i < aRoots.length; i++) if (aRoots[i] !== bRoots[i] || aProps[i] !== bProps[i]) return false;
|
|
74
99
|
return true;
|
|
75
100
|
}
|
|
76
|
-
function withTracking(disposer, root, fn) {
|
|
101
|
+
function withTracking(disposer, root, fn, staticDeps = false) {
|
|
77
102
|
let offs = [];
|
|
78
|
-
let
|
|
79
|
-
|
|
103
|
+
let prevRoots = [];
|
|
104
|
+
let prevProps = [];
|
|
105
|
+
let scopeRoots = [];
|
|
106
|
+
let scopeProps = [];
|
|
80
107
|
let stable = 0;
|
|
81
108
|
const run = () => {
|
|
82
109
|
if (stable >= 2) {
|
|
83
110
|
fn();
|
|
84
111
|
return;
|
|
85
112
|
}
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
113
|
+
const prevRootsActive = _activeRoots;
|
|
114
|
+
const prevPropsActive = _activeProps;
|
|
115
|
+
scopeRoots = [];
|
|
116
|
+
scopeProps = [];
|
|
117
|
+
_activeRoots = scopeRoots;
|
|
118
|
+
_activeProps = scopeProps;
|
|
89
119
|
try {
|
|
90
120
|
fn();
|
|
91
121
|
} finally {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
122
|
+
_activeRoots = prevRootsActive;
|
|
123
|
+
_activeProps = prevPropsActive;
|
|
124
|
+
const roots2 = scopeRoots;
|
|
125
|
+
const props2 = scopeProps;
|
|
126
|
+
if (_depsEqual(roots2, props2, prevRoots, prevProps)) stable = staticDeps ? 2 : stable + 1;
|
|
95
127
|
else {
|
|
96
|
-
stable = 0;
|
|
128
|
+
stable = staticDeps ? 2 : 0;
|
|
97
129
|
for (let i = 0; i < offs.length; i++) offs[i]();
|
|
98
130
|
offs = [];
|
|
99
|
-
for (let i = 0; i <
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
prevDeps = d2;
|
|
131
|
+
for (let i = 0; i < roots2.length; i++) offs.push(subscribe(roots2[i] ?? root, [props2[i]], run));
|
|
132
|
+
prevRoots = roots2;
|
|
133
|
+
prevProps = props2;
|
|
104
134
|
}
|
|
105
135
|
}
|
|
106
136
|
};
|
|
@@ -112,6 +142,15 @@ function withTracking(disposer, root, fn) {
|
|
|
112
142
|
}
|
|
113
143
|
//#endregion
|
|
114
144
|
//#region ../gea/src/runtime/bind.ts
|
|
145
|
+
/**
|
|
146
|
+
* `root` is `object`, not `any`: every call site hands in a concrete
|
|
147
|
+
* component/store `this` (see `subscribe.ts`'s doc comment — the same
|
|
148
|
+
* reasoning applies here, one level up). `object` also happens to be exactly
|
|
149
|
+
* what both downstream calls need: `readPath`/`subscribe` accept the wider
|
|
150
|
+
* `object | null | undefined` (object is a subtype, no cast needed), and
|
|
151
|
+
* `withTracking` requires `object` outright — so no assertion is needed at
|
|
152
|
+
* either call site.
|
|
153
|
+
*/
|
|
115
154
|
function bind(disposer, root, pathOrGetter, apply) {
|
|
116
155
|
if (Array.isArray(pathOrGetter)) {
|
|
117
156
|
apply(readPath(root, pathOrGetter));
|
package/dist/bind.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.mjs","names":[],"sources":["../../gea/src/runtime/symbols.ts","../../gea/src/runtime/subscribe.ts","../../gea/src/runtime/with-tracking.ts","../../gea/src/runtime/bind.ts"],"sourcesContent":["/**\n * Closure-compiled core: the 8 surviving symbols.\n *\n * Descriptors match packages/gea/src/symbols.ts entries so `Symbol.for`\n * interning keeps shared symbol identity across entrypoints.\n */\n\n// Identity (6)\nexport const GEA_ELEMENT = Symbol.for('gea.element')\nexport const GEA_STORE_ROOT = Symbol.for('gea.store.rootProxy')\nexport const GEA_PROXY_RAW = Symbol.for('gea.proxy.raw')\nexport const GEA_DOM_COMPONENT = Symbol.for('gea.dom.component')\nexport const GEA_PARENT_COMPONENT = Symbol.for('gea.component.parentComponent')\nexport const GEA_ITEM_KEY = Symbol.for('gea.itemKey')\n\n// Proxy detection (1)\nexport const GEA_PROXY_IS_PROXY = Symbol.for('gea.proxy.isProxy')\n\n// Protocol dispatch (1) — compiler emits `instance[GEA_CREATE_TEMPLATE](disposer)`.\nexport const GEA_CREATE_TEMPLATE = Symbol.for('gea.component.createTemplate')\nexport const GEA_ON_PROP_CHANGE = Symbol.for('gea.onPropChange')\n","/**\n * subscribe(root, path, fn) — path-indexed subscription helper for the\n * closure-compiled runtime.\n *\n * Delegates to the existing `Store.prototype.observe(path, handler)` API —\n * which already handles path-indexed buckets (`priv.observers`) and resolves\n * the tail on fire. That means `subscribe` does NOT need to extend store.ts\n * with a new registration entry point; the observer-bucket machinery already\n * handles the single-root-prop + tail-resolve case.\n *\n * `root` may be a Store proxy, a raw Store, or any object that exposes an\n * `observe(path, fn)` method (SSR shim uses the same signature).\n */\n\nimport type { Store, Change } from '../store'\n\ntype PathInput = readonly string[]\n\nexport function subscribe(root: any, path: PathInput, fn: (v: any, changes?: Change[]) => void): () => void {\n if (!root) return () => {}\n // Walk path prefixes: if the current root resolves `path[0]` to a nested Store\n // (has its own `.observe`), descend into it. This lets the compiler emit\n // `['store', 'count']` against `this` and have the subscription land on\n // `this.store` (the actual Store proxy) with tail `['count']`.\n let r: any = root\n let p: PathInput = path\n while (p.length > 1) {\n const head = p[0]\n const next = r?.[head]\n if (!next || typeof next.observe !== 'function') break\n r = next\n p = p.slice(1)\n }\n // If the final root doesn't have .observe, we can't subscribe — emit noop.\n if (!r || typeof r.observe !== 'function') return () => {}\n // Empty path → fire on any change (root-observer semantics in Store.observe).\n if (p.length === 0) return (r as Store).observe('', fn as any)\n // Pass `fn` directly as the observer — the trampoline `(v, changes) => fn(...)`\n // was a no-op hop that allocated one closure per subscribe (5k closures for\n // a 1000-row 5-binding list). Drop it.\n return (r as Store).observe(p, fn as any)\n}\n\n/** Resolve a path against the root proxy; returns `undefined` on null holes. */\nexport function readPath(root: any, path: readonly string[]): unknown {\n if (!root) return undefined\n let v: any = root\n for (let i = 0; i < path.length; i++) {\n if (v == null) return undefined\n v = v[path[i]]\n }\n return v\n}\n","/**\n * withTracking(disposer, root, fn) — lexical reactivity scope.\n *\n * Tracks (storeRoot, prop) tuples so the effect can subscribe on the real\n * store that owns each accessed property — not the `root` param (which for\n * fn components is a props-thunks proxy with no observe()).\n *\n * Scope is strictly lexical: `_active` is null outside of withTracking; store\n * proxy traps are a no-op in that case (zero ambient cost).\n *\n * Perf path: after 2 consecutive runs produce the SAME dep set, the effect\n * enters \"locked\" mode and subsequent re-runs skip the scope/tracking\n * entirely — `run` becomes a bare `fn()` call. Most reactive bindings in\n * keyed-list rows (e.g. `store.selected === item.id ? 'danger' : ''`)\n * read a fixed (store, item) pair every time, so this is the common case.\n * The 1000-effect fire on 04_select1k drops from \"1000 scope allocations +\n * 1000 dep comparisons\" to \"1000 plain function calls\".\n */\n\nimport type { Disposer } from './disposer'\nimport { subscribe } from './subscribe'\n\ninterface Dep {\n root: any\n prop: string\n}\ninterface Scope {\n deps: Dep[]\n}\nlet _active: Scope | null = null\nlet _recursing = false\n\n/** Record a tracking read. Called by store.ts proxy traps. */\nexport function trackRead(storeRoot: any, prop: string | symbol): void {\n if (!_active || _recursing) return\n if (typeof prop !== 'string') return\n _recursing = true\n try {\n // Linear dedup — 1-3 deps is typical per binding, a Map is overkill.\n const deps = _active.deps\n for (let i = 0; i < deps.length; i++) {\n if (deps[i].root === storeRoot && deps[i].prop === prop) return\n }\n deps.push({ root: storeRoot, prop })\n } finally {\n _recursing = false\n }\n}\n\n/** Test helper — no-op; real Store reads fire trackRead through the proxy. */\nexport function trackPath(_path: readonly string[]): void {\n /* no-op */\n}\n\n/** Suppress tracking for `fn`. */\nexport function untrack<T>(fn: () => T): T {\n const prev = _active\n _active = null\n try {\n return fn()\n } finally {\n _active = prev\n }\n}\n\nfunction _depsEqual(a: Dep[], b: Dep[]): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i].root !== b[i].root || a[i].prop !== b[i].prop) return false\n }\n return true\n}\n\nexport function withTracking(disposer: Disposer, root: any, fn: () => void): void {\n let offs: Array<() => void> = []\n let prevDeps: Dep[] = []\n // Reused across the 2 pre-lock runs — saves a Scope + deps array alloc\n // each fire on 01_run1k / 07_create10k (6000 allocs for 1000 rows × 3\n // bindings × 2 runs).\n const scope: Scope = { deps: [] }\n // Stability counter: 0 = first run; 1 = one identical run; 2 = locked.\n // Locked effects skip tracking on every subsequent fire (same idea as the\n // compiled patcher's fast path). Require 2 identical runs before locking so\n // conditional-dep bindings (e.g. `x && x.y`) get a chance to register\n // their full dep set before the fast path engages.\n let stable = 0\n const run = (): void => {\n if (stable >= 2) {\n fn()\n return\n }\n const prev = _active\n scope.deps = []\n _active = scope\n try {\n fn()\n } finally {\n _active = prev\n const d2 = scope.deps\n if (_depsEqual(d2, prevDeps)) {\n stable++\n } else {\n stable = 0\n for (let i = 0; i < offs.length; i++) offs[i]()\n offs = []\n for (let i = 0; i < d2.length; i++) {\n const d = d2[i]\n offs.push(subscribe(d.root ?? root, [d.prop], run))\n }\n prevDeps = d2\n }\n }\n }\n run()\n disposer.add(() => {\n for (let i = 0; i < offs.length; i++) offs[i]()\n offs = []\n })\n}\n","/**\n * bind(disposer, root, pathOrGetter, apply) — single wire-up primitive for\n * every reactive-* helper. All the reactive-attr/bool/class/style/value/text\n * wrappers share this shape: compute the value, write it via `apply`, and\n * re-run on source change.\n *\n * - Static path (string[]): `readPath` + `subscribe`, closure tracks prev.\n * - Dynamic getter (() => unknown): `withTracking` scope re-runs on any\n * tracked-path change.\n *\n * (Keep per-binding withTracking: batching into one effect per row WOULD\n * reduce allocation overhead on 01_run1k / 09_clear1k but triggers every\n * binding in the row on every fire, regressing 04_select1k catastrophically\n * when one store key change cascades through N applies that didn't actually\n * depend on it. Per-dep subscription is the right granularity for updates.)\n */\n\nimport type { Disposer } from './disposer'\nimport { readPath, subscribe } from './subscribe'\nimport { withTracking } from './with-tracking'\n\nexport function bind(\n disposer: Disposer,\n root: any,\n pathOrGetter: readonly string[] | (() => unknown),\n apply: (v: unknown) => void,\n): void {\n if (Array.isArray(pathOrGetter)) {\n apply(readPath(root, pathOrGetter))\n const off = subscribe(root, pathOrGetter, apply)\n disposer.add(off)\n return\n }\n const getter = pathOrGetter as () => unknown\n withTracking(disposer, root, () => {\n apply(getter())\n })\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bind.mjs","names":[],"sources":["../../gea/src/runtime/symbols.ts","../../gea/src/runtime/subscribe.ts","../../gea/src/runtime/with-tracking.ts","../../gea/src/runtime/bind.ts"],"sourcesContent":["/**\n * Closure-compiled core: the 8 surviving symbols.\n *\n * Descriptors match packages/gea/src/symbols.ts entries so `Symbol.for`\n * interning keeps shared symbol identity across entrypoints.\n */\n\n// Identity (6)\nexport const GEA_ELEMENT = Symbol.for('gea.element')\nexport const GEA_STORE_ROOT = Symbol.for('gea.store.rootProxy')\nexport const GEA_PROXY_RAW = Symbol.for('gea.proxy.raw')\nexport const GEA_DOM_COMPONENT = Symbol.for('gea.dom.component')\nexport const GEA_PARENT_COMPONENT = Symbol.for('gea.component.parentComponent')\nexport const GEA_ITEM_KEY = Symbol.for('gea.itemKey')\n\n// Proxy detection (1)\nexport const GEA_PROXY_IS_PROXY = Symbol.for('gea.proxy.isProxy')\n\n// Protocol dispatch (1) — compiler emits `instance[GEA_CREATE_TEMPLATE](disposer)`.\nexport const GEA_CREATE_TEMPLATE = Symbol.for('gea.component.createTemplate')\nexport const GEA_ON_PROP_CHANGE = Symbol.for('gea.onPropChange')\n","/**\n * subscribe(root, path, fn) — path-indexed subscription helper for the\n * closure-compiled runtime.\n *\n * Delegates to the existing `Store.prototype.observe(path, handler)` API —\n * which already handles path-indexed buckets (`priv.observers`) and resolves\n * the tail on fire. That means `subscribe` does NOT need to extend store.ts\n * with a new registration entry point; the observer-bucket machinery already\n * handles the single-root-prop + tail-resolve case.\n *\n * `root` may be a Store proxy, a raw Store, or any object that exposes an\n * `observe(path, fn)` method (SSR shim uses the same signature).\n */\n\nimport type { Change } from '../store'\n\ntype PathInput = readonly string[]\n\n/** Anything exposing the runtime's `observe(path, handler)` contract. */\ninterface Observable {\n observe(path: string | readonly string[], handler: (value: unknown, changes?: Change[]) => void): () => void\n}\n\nfunction isObservable(x: object): x is Observable {\n return typeof (x as { observe?: unknown }).observe === 'function'\n}\n\n/**\n * `root`'s real type at every call site is concrete (a component's `this`, a\n * nested store, ...), so it's `object` here rather than `any` — but\n * `subscribe` itself can't resolve *which* nested object along `path` ends up\n * observed: that's chosen by walking `path` at runtime and testing each\n * segment for its own `.observe` method (a decision no static structural type\n * over `root` can predict, since `path`'s length isn't fixed). `V` is\n * therefore supplied by the caller's own `fn`, the same way\n * `EventEmitter#on<T>(name, fn: (arg: T) => void)` lets the caller's\n * callback pin the type rather than the emitter deriving it.\n */\nexport function subscribe<V>(\n root: object | null | undefined,\n path: PathInput,\n fn: (v: V, changes?: Change[]) => void,\n): () => void {\n if (!root) return () => {}\n // Walk path prefixes: if the current root resolves `path[0]` to a nested Store\n // (has its own `.observe`), descend into it. This lets the compiler emit\n // `['store', 'count']` against `this` and have the subscription land on\n // `this.store` (the actual Store proxy) with tail `['count']`.\n let r: object = root\n let p: PathInput = path\n while (p.length > 1) {\n const head = p[0]\n const next = (r as Record<string, unknown>)[head]\n if (!next || typeof next !== 'object' || !isObservable(next)) break\n r = next\n p = p.slice(1)\n }\n // If the final root doesn't have .observe, we can't subscribe — emit noop.\n if (!isObservable(r)) return () => {}\n // The bridge from the caller's `V`-typed callback to `Observable`'s\n // necessarily-`unknown` handler (a Store's `observe` serves every prop on\n // every store shape in the app, so it can't be typed narrower than\n // `unknown` itself) — invisible from outside `subscribe`, same as above.\n const handler = fn as unknown as (value: unknown, changes?: Change[]) => void\n // Empty path → fire on any change (root-observer semantics in Store.observe).\n if (p.length === 0) return r.observe('', handler)\n if (p.length === 1) return r.observe(p[0], handler)\n // Pass the handler directly as the observer — the trampoline `(v, changes) => fn(...)`\n // was a no-op hop that allocated one closure per subscribe (5k closures for\n // a 1000-row 5-binding list). Drop it.\n return r.observe(p, handler)\n}\n\n/** Resolve a path against the root proxy; returns `undefined` on null holes.\n *\n * `V` defaults to `unknown` (not forced) — the same genuinely dynamic\n * boundary as `JSON.parse`: reading an arbitrary-length path out of an\n * arbitrary-shaped root, with no way to derive the result type structurally.\n * Callers that know what they're reading supply `V` explicitly.\n */\nexport function readPath<V = unknown>(root: object | null | undefined, path: readonly string[]): V {\n if (!root) return undefined as V\n let v: unknown = root\n for (let i = 0; i < path.length; i++) {\n if (v == null) return undefined as V\n v = (v as Record<string, unknown>)[path[i]]\n }\n return v as V\n}\n","/**\n * withTracking(disposer, root, fn) — lexical reactivity scope.\n *\n * Tracks (storeRoot, prop) tuples so the effect can subscribe on the real\n * store that owns each accessed property — not the `root` param (which for\n * fn components is a props-thunks proxy with no observe()).\n *\n * Scope is strictly lexical: `_active` is null outside of withTracking; store\n * proxy traps are a no-op in that case (zero ambient cost).\n *\n * Perf path: after 2 consecutive runs produce the SAME dep set, the effect\n * enters \"locked\" mode and subsequent re-runs skip the scope/tracking\n * entirely — `run` becomes a bare `fn()` call. Most reactive bindings in\n * keyed-list rows (e.g. `store.selected === item.id ? 'danger' : ''`)\n * read a fixed (store, item) pair every time, so this is the common case.\n * The 1000-effect fire on 04_select1k drops from \"1000 scope allocations +\n * 1000 dep comparisons\" to \"1000 plain function calls\".\n */\n\nimport type { Disposer } from './disposer'\nimport { subscribe } from './subscribe'\n\n// The active scope is two parallel module-level arrays, not a `Scope` record\n// holding a `Dep[]`. Under geatsc an `any`-typed array is\n// `vector:inline-value<undefined>`, which has no physical storage as a RECORD\n// FIELD (\"Frozen vector:inline-value<undefined> has no physical storage\n// materialization in finite-aggregate\") — as a plain local or module binding it\n// is fine. Keeping the arrays out of any record shape sidesteps that entirely,\n// and the pairs, the linear dedup and the save/restore nesting are unchanged.\n//\n// `object` rather than `any`/`unknown`: every root pushed here is a real\n// store/component reference from a proxy trap (`store.ts`'s `rootGetValue`,\n// `compiled-store.ts`'s `get` trap, ...) — never a primitive — so `object` is\n// the honest type. Nothing here needs to know WHICH object; identity\n// (`===`) is the only operation performed on these entries.\nlet _activeRoots: object[] | null = null\nlet _activeProps: string[] | null = null\nlet _recursing = false\n\n/** Record a tracking read. Called by store.ts proxy traps. */\nexport function trackRead(storeRoot: object, prop: string | symbol): void {\n if (!_activeRoots || !_activeProps || _recursing) return\n if (typeof prop !== 'string') return\n _recursing = true\n try {\n // Linear dedup — 1-3 deps is typical per binding, a Map is overkill.\n const roots = _activeRoots\n const props = _activeProps\n for (let i = 0; i < roots.length; i++) {\n if (roots[i] === storeRoot && props[i] === prop) return\n }\n roots.push(storeRoot)\n props.push(prop)\n } finally {\n _recursing = false\n }\n}\n\n/** Test helper — no-op; real Store reads fire trackRead through the proxy. */\nexport function trackPath(_path: readonly string[]): void {\n /* no-op */\n}\n\n/** Suppress tracking for `fn`. */\nexport function untrack<T>(fn: () => T): T {\n const prevRoots = _activeRoots\n const prevProps = _activeProps\n _activeRoots = null\n _activeProps = null\n try {\n return fn()\n } finally {\n _activeRoots = prevRoots\n _activeProps = prevProps\n }\n return undefined as T\n}\n\nfunction _depsEqual(aRoots: object[], aProps: string[], bRoots: object[], bProps: string[]): boolean {\n if (aRoots.length !== bRoots.length) return false\n for (let i = 0; i < aRoots.length; i++) {\n if (aRoots[i] !== bRoots[i] || aProps[i] !== bProps[i]) return false\n }\n return true\n}\n\nexport function withTracking(disposer: Disposer, root: object, fn: () => void, staticDeps = false): void {\n let offs: Array<() => void> = []\n let prevRoots: object[] = []\n let prevProps: string[] = []\n // Reused across the 2 pre-lock runs — saves a Scope + deps array alloc\n // each fire on 01_run1k / 07_create10k (6000 allocs for 1000 rows × 3\n // bindings × 2 runs).\n let scopeRoots: object[] = []\n let scopeProps: string[] = []\n // Stability counter: 0 = first run; 1 = one identical run; 2 = locked.\n // Locked effects skip tracking on every subsequent fire (same idea as the\n // compiled patcher's fast path). Require 2 identical runs before locking so\n // conditional-dep bindings (e.g. `x && x.y`) get a chance to register\n // their full dep set before the fast path engages.\n let stable = 0\n const run = (): void => {\n if (stable >= 2) {\n fn()\n return\n }\n const prevRootsActive = _activeRoots\n const prevPropsActive = _activeProps\n scopeRoots = []\n scopeProps = []\n _activeRoots = scopeRoots\n _activeProps = scopeProps\n try {\n fn()\n } finally {\n _activeRoots = prevRootsActive\n _activeProps = prevPropsActive\n const roots2 = scopeRoots\n const props2 = scopeProps\n if (_depsEqual(roots2, props2, prevRoots, prevProps)) {\n stable = staticDeps ? 2 : stable + 1\n } else {\n stable = staticDeps ? 2 : 0\n for (let i = 0; i < offs.length; i++) offs[i]()\n offs = []\n for (let i = 0; i < roots2.length; i++) {\n offs.push(subscribe(roots2[i] ?? root, [props2[i]], run))\n }\n prevRoots = roots2\n prevProps = props2\n }\n }\n }\n run()\n disposer.add(() => {\n for (let i = 0; i < offs.length; i++) offs[i]()\n offs = []\n })\n}\n","/**\n * bind(disposer, root, pathOrGetter, apply) — single wire-up primitive for\n * every reactive-* helper. All the reactive-attr/bool/class/style/value/text\n * wrappers share this shape: compute the value, write it via `apply`, and\n * re-run on source change.\n *\n * - Static path (string[]): `readPath` + `subscribe`, closure tracks prev.\n * - Dynamic getter (() => unknown): `withTracking` scope re-runs on any\n * tracked-path change.\n *\n * (Keep per-binding withTracking: batching into one effect per row WOULD\n * reduce allocation overhead on 01_run1k / 09_clear1k but triggers every\n * binding in the row on every fire, regressing 04_select1k catastrophically\n * when one store key change cascades through N applies that didn't actually\n * depend on it. Per-dep subscription is the right granularity for updates.)\n */\n\nimport type { Disposer } from './disposer'\nimport { readPath, subscribe } from './subscribe'\nimport { withTracking } from './with-tracking'\n\n/**\n * `root` is `object`, not `any`: every call site hands in a concrete\n * component/store `this` (see `subscribe.ts`'s doc comment — the same\n * reasoning applies here, one level up). `object` also happens to be exactly\n * what both downstream calls need: `readPath`/`subscribe` accept the wider\n * `object | null | undefined` (object is a subtype, no cast needed), and\n * `withTracking` requires `object` outright — so no assertion is needed at\n * either call site.\n */\nexport function bind(\n disposer: Disposer,\n root: object,\n pathOrGetter: readonly string[] | (() => unknown),\n apply: (v: unknown) => void,\n): void {\n if (Array.isArray(pathOrGetter)) {\n apply(readPath(root, pathOrGetter))\n const off = subscribe(root, pathOrGetter, apply)\n disposer.add(off)\n return\n }\n const getter = pathOrGetter as () => unknown\n withTracking(disposer, root, () => {\n apply(getter())\n })\n}\n"],"mappings":"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"}
|
package/dist/combobox.mjs
CHANGED
|
@@ -220,6 +220,64 @@ var Combobox = class extends ZagComponent {
|
|
|
220
220
|
}
|
|
221
221
|
let __kl_prev = __kl_first;
|
|
222
222
|
const __kl_reconcile = (arr, changes) => {
|
|
223
|
+
if (!Array.isArray(arr)) arr = [];
|
|
224
|
+
if (changes && changes.length > 0) {
|
|
225
|
+
let aipuPatchable = true;
|
|
226
|
+
for (let i = 0; i < changes.length; i++) {
|
|
227
|
+
const change = changes[i];
|
|
228
|
+
const idx = change.arix;
|
|
229
|
+
if (!change.aipu || idx < 0 || idx >= __kl_entries.length || !change.itemDirty && __kl_entries[idx].key !== __kl_key(change.newValue, idx)) {
|
|
230
|
+
aipuPatchable = false;
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (aipuPatchable) {
|
|
235
|
+
for (let i = 0; i < changes.length; i++) {
|
|
236
|
+
const idx = changes[i].arix;
|
|
237
|
+
let superseded = false;
|
|
238
|
+
for (let j = i + 1; j < changes.length; j++) if (changes[j].arix === idx) {
|
|
239
|
+
superseded = true;
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
if (superseded) continue;
|
|
243
|
+
const item = changes[i].newValue;
|
|
244
|
+
__kl_patch(__kl_entries[idx], item, idx);
|
|
245
|
+
if (item && typeof item === "object") {
|
|
246
|
+
item[_DIRTY] = false;
|
|
247
|
+
item[_DIRTY_PROPS]?.clear();
|
|
248
|
+
}
|
|
249
|
+
__kl_entries[idx].item = __kl_unwrap(item);
|
|
250
|
+
if (__kl_prev && __kl_prev.length === __kl_entries.length) __kl_prev[idx] = __kl_unwrap(item);
|
|
251
|
+
}
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
let dirtyOnly = true;
|
|
255
|
+
for (let i = 0; i < changes.length; i++) {
|
|
256
|
+
const change = changes[i];
|
|
257
|
+
if (change.aipu || change.type === "append" || change.type === "remove" || change.type === "delete" || change.type === "reorder") {
|
|
258
|
+
dirtyOnly = false;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (dirtyOnly) {
|
|
263
|
+
const raw = arr[GEA_PROXY_RAW] || arr;
|
|
264
|
+
if (__kl_entries.length === arr.length) {
|
|
265
|
+
let patched = false;
|
|
266
|
+
for (let i = 0; i < raw.length; i++) {
|
|
267
|
+
const item = raw[i];
|
|
268
|
+
if (item && typeof item === "object" && item[_DIRTY]) {
|
|
269
|
+
__kl_patch(__kl_entries[i], item, i);
|
|
270
|
+
item[_DIRTY] = false;
|
|
271
|
+
item[_DIRTY_PROPS]?.clear();
|
|
272
|
+
__kl_entries[i].item = item;
|
|
273
|
+
patched = true;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (patched) return;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
const raw = arr[GEA_PROXY_RAW] || arr;
|
|
223
281
|
if (arr === __kl_prev && __kl_entries.length === arr.length) {
|
|
224
282
|
let structural = false;
|
|
225
283
|
let aipuOnly = changes && changes.length > 0;
|
|
@@ -256,7 +314,6 @@ var Combobox = class extends ZagComponent {
|
|
|
256
314
|
}
|
|
257
315
|
}
|
|
258
316
|
if (!structural) {
|
|
259
|
-
const raw = arr[GEA_PROXY_RAW] || arr;
|
|
260
317
|
for (let i = 0; i < raw.length; i++) {
|
|
261
318
|
const item = raw[i];
|
|
262
319
|
if (item && typeof item === "object" && item[_DIRTY]) {
|
|
@@ -387,9 +444,16 @@ var Combobox = class extends ZagComponent {
|
|
|
387
444
|
}
|
|
388
445
|
if (oldLen > 0 && newLen > 0 && __kl_container.childNodes.length === oldLen) {
|
|
389
446
|
let disjoint = true;
|
|
390
|
-
for (let i = 0; i < newLen; i++)
|
|
391
|
-
|
|
392
|
-
|
|
447
|
+
for (let i = 0; i < newLen; i++) {
|
|
448
|
+
let existing = null;
|
|
449
|
+
for (let j = 0; j < oldLen; j++) if (__kl_entries[j].key === newKeys[i]) {
|
|
450
|
+
existing = __kl_entries[j];
|
|
451
|
+
break;
|
|
452
|
+
}
|
|
453
|
+
if (existing) {
|
|
454
|
+
disjoint = false;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
393
457
|
}
|
|
394
458
|
if (disjoint) {
|
|
395
459
|
for (let i = 0; i < oldLen; i++) __kl_entries[i].disposer?.dispose();
|
|
@@ -412,7 +476,11 @@ var Combobox = class extends ZagComponent {
|
|
|
412
476
|
const seenOld = new Array(oldLen).fill(false);
|
|
413
477
|
const nextEntries = new Array(newLen);
|
|
414
478
|
for (let i = 0; i < newLen; i++) {
|
|
415
|
-
|
|
479
|
+
let entry = null;
|
|
480
|
+
for (let j = 0; j < oldLen; j++) if (__kl_entries[j].key === newKeys[i]) {
|
|
481
|
+
entry = __kl_entries[j];
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
416
484
|
if (entry) {
|
|
417
485
|
const oldIdx = entry._i;
|
|
418
486
|
seenOld[oldIdx] = true;
|
|
@@ -436,7 +504,7 @@ var Combobox = class extends ZagComponent {
|
|
|
436
504
|
};
|
|
437
505
|
if (__kl_root && typeof __kl_root.observe === "function") {
|
|
438
506
|
const off = __kl_root.observe("filteredItems", (_value, changes) => {
|
|
439
|
-
__kl_reconcile(
|
|
507
|
+
__kl_reconcile(_value, changes);
|
|
440
508
|
});
|
|
441
509
|
d.add(off);
|
|
442
510
|
}
|
package/dist/combobox.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveTextValue","conditionalTruthy","reactiveAttr","GEA_DIRTY_PROPS","GEA_DOM_ITEM","GEA_PROXY_RAW","GEA_DIRTY","combobox","normalizeProps","ZagComponent","_tpl0_root","_tpl0_create","t","document","createElement","innerHTML","content","firstChild","_tpl1_root","_tpl1_create","_tpl2_root","_tpl2_create","Combobox","open","value","inputValue","filteredItems","_allItems","created","props","items","createMachine","_props","machine","_buildCollection","collection","itemToValue","item","itemToString","label","_filterItems","query","q","toLowerCase","filtered","filter","includes","_machine","updateProps","getMachineProps","col","id","defaultValue","defaultInputValue","defaultOpen","multiple","disabled","readOnly","invalid","required","placeholder","inputBehavior","selectionBehavior","closeOnSelect","allowCustomValue","loopFocus","openOnClick","name","form","positioning","onValueChange","details","ValueChangeDetails","onInputValueChange","InputValueChangeDetails","onOpenChange","OpenChangeDetails","connectApi","service","connect","getSpreadMap","[data-part=\"item\"]","api","el","HTMLElement","dataset","getItemProps","[data-part=\"item-text\"]","getItemTextProps","[data-part=\"item-indicator\"]","getItemIndicatorProps","syncState","d","root","cloneNode","el0","anchor1","parent2","childNodes","class","parentNode","marker0","t0","__ki_L0","idx","setAttribute","String","__n","nodeValue","__kp_L0","has","__r0","__r1","__r2","__kl_container","__kl_root","__kl_key","__kl_create","__k","__el","key","element","__kl_patch","e","newItem","newIdx","__raw","__kl_unwrap","v","__kl_resolve","Array","isArray","__kl_entries","__kl_byKey","Map","__kl_remove","entry","disposer","dispose","delete","removeChild","__kl_first","length","frag","ownerDocument","createDocumentFragment","i","push","set","appendChild","clear","__kl_prev","__kl_reconcile","arr","changes","structural","aipuOnly","change","type","aipu","a","arix","b","entryA","entryB","newAKey","newBKey","refB","nextSibling","insertBefore","raw","onlyAppends","appendCount","count","start","onlyRemoves","totalRemoved","splice","removed","j","sort","newLen","oldLen","nextEntries","newKeys","textContent","diffA","diffB","diffCount","disjoint","nextNodes","replaceChildren","_i","seenOld","fill","get","oldIdx","nextRef","observe","off","_value","add"],"sources":["../src/components/combobox.tsx"],"sourcesContent":["import * as combobox from '@zag-js/combobox'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class Combobox extends ZagComponent {\n declare open: boolean\n declare value: string[]\n declare inputValue: string\n declare filteredItems: any[]\n declare _allItems: any[]\n\n created(props: any) {\n this._allItems = props.items || []\n this.filteredItems = [...this._allItems]\n super.created(props)\n }\n\n createMachine(_props: any): any {\n return combobox.machine\n }\n\n _buildCollection(items: any[]) {\n return combobox.collection({\n items,\n itemToValue: (item: any) => item.value,\n itemToString: (item: any) => item.label || item.value,\n })\n }\n\n _filterItems(query: string) {\n const q = query.toLowerCase()\n const filtered = q\n ? this._allItems.filter((item: any) => (item.label || item.value).toLowerCase().includes(q))\n : [...this._allItems]\n this.filteredItems = filtered\n this._machine?.updateProps({ collection: this._buildCollection(filtered) })\n }\n\n getMachineProps(props: any) {\n const col = props.collection || this._buildCollection(this._allItems)\n\n return {\n id: this.id,\n collection: col,\n value: props.value,\n defaultValue: props.defaultValue,\n inputValue: props.inputValue,\n defaultInputValue: props.defaultInputValue,\n open: props.open,\n defaultOpen: props.defaultOpen,\n multiple: props.multiple,\n disabled: props.disabled,\n readOnly: props.readOnly,\n invalid: props.invalid,\n required: props.required,\n placeholder: props.placeholder,\n inputBehavior: props.inputBehavior ?? 'none',\n selectionBehavior: props.selectionBehavior ?? 'replace',\n closeOnSelect: props.closeOnSelect ?? true,\n allowCustomValue: props.allowCustomValue,\n loopFocus: props.loopFocus ?? true,\n openOnClick: props.openOnClick ?? false,\n name: props.name,\n form: props.form,\n positioning: props.positioning,\n onValueChange: (details: combobox.ValueChangeDetails) => {\n this.value = details.value\n props.onValueChange?.(details)\n },\n onInputValueChange: (details: combobox.InputValueChangeDetails) => {\n this.inputValue = details.inputValue\n this._filterItems(details.inputValue)\n props.onInputValueChange?.(details)\n },\n onOpenChange: (details: combobox.OpenChangeDetails) => {\n this.open = details.open\n props.onOpenChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return combobox.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"label\"]': 'getLabelProps',\n '[data-part=\"control\"]': 'getControlProps',\n '[data-part=\"input\"]': 'getInputProps',\n '[data-part=\"trigger\"]': 'getTriggerProps',\n '[data-part=\"clear-trigger\"]': 'getClearTriggerProps',\n '[data-part=\"positioner\"]': 'getPositionerProps',\n '[data-part=\"content\"]': 'getContentProps',\n '[data-part=\"list\"]': 'getListProps',\n '[data-part=\"item\"]': (api, el) => {\n const value = (el as HTMLElement).dataset.value\n const label = (el as HTMLElement).dataset.label || value\n return api.getItemProps({ item: { value, label } })\n },\n '[data-part=\"item-text\"]': (api, el) => {\n const value = (el as HTMLElement).dataset.value\n const label = (el as HTMLElement).dataset.label || value\n return api.getItemTextProps({ item: { value, label } })\n },\n '[data-part=\"item-indicator\"]': (api, el) => {\n const value = (el as HTMLElement).dataset.value\n const label = (el as HTMLElement).dataset.label || value\n return api.getItemIndicatorProps({ item: { value, label } })\n },\n }\n }\n\n syncState(api: any) {\n this.open = api.open\n this.value = api.value\n this.inputValue = api.inputValue\n }\n\n template(props: any) {\n return (\n <div data-part=\"root\" class={props.class || ''}>\n {props.label && (\n <label data-part=\"label\" class=\"combobox-label text-sm font-medium mb-1 block\">\n {props.label}\n </label>\n )}\n <div data-part=\"control\" class=\"combobox-control flex\">\n <input\n data-part=\"input\"\n class=\"combobox-input flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring\"\n />\n <button\n data-part=\"trigger\"\n class=\"combobox-trigger inline-flex h-9 items-center justify-center rounded-r-md border border-l-0 border-input px-2\"\n >\n ▼\n </button>\n </div>\n <div data-part=\"positioner\" class=\"combobox-positioner\">\n <div\n data-part=\"content\"\n class=\"combobox-content z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n <div data-part=\"list\">\n {this.filteredItems.map((item: any) => (\n <div\n key={item.value}\n data-part=\"item\"\n data-value={item.value}\n data-label={item.label}\n class=\"combobox-item relative flex cursor-pointer select-none items-center rounded-xs px-2 py-1.5 text-sm outline-hidden data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground\"\n >\n <span data-part=\"item-text\" data-value={item.value} data-label={item.label}>\n {item.label}\n </span>\n <span\n data-part=\"item-indicator\"\n data-value={item.value}\n data-label={item.label}\n class=\"combobox-item-indicator ml-auto\"\n >\n ✓\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n )\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"combobox.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveTextValue","conditionalTruthy","reactiveAttr","GEA_DIRTY_PROPS","GEA_DOM_ITEM","GEA_PROXY_RAW","GEA_DIRTY","combobox","normalizeProps","ZagComponent","_tpl0_root","_tpl0_create","t","document","createElement","innerHTML","content","firstChild","_tpl1_root","_tpl1_create","_tpl2_root","_tpl2_create","Combobox","open","value","inputValue","filteredItems","_allItems","created","props","items","createMachine","_props","machine","_buildCollection","collection","itemToValue","item","itemToString","label","_filterItems","query","q","toLowerCase","filtered","filter","includes","_machine","updateProps","getMachineProps","col","id","defaultValue","defaultInputValue","defaultOpen","multiple","disabled","readOnly","invalid","required","placeholder","inputBehavior","selectionBehavior","closeOnSelect","allowCustomValue","loopFocus","openOnClick","name","form","positioning","onValueChange","details","ValueChangeDetails","onInputValueChange","InputValueChangeDetails","onOpenChange","OpenChangeDetails","connectApi","service","connect","getSpreadMap","[data-part=\"item\"]","api","el","HTMLElement","dataset","getItemProps","[data-part=\"item-text\"]","getItemTextProps","[data-part=\"item-indicator\"]","getItemIndicatorProps","syncState","d","root","cloneNode","el0","anchor1","parent2","childNodes","class","parentNode","marker0","t0","__ki_L0","idx","setAttribute","String","__n","nodeValue","__kp_L0","has","__r0","__r1","__r2","__kl_container","__kl_root","__kl_key","__kl_create","__k","__el","key","element","__kl_patch","e","newItem","newIdx","__raw","__kl_unwrap","v","__kl_resolve","Array","isArray","__kl_entries","__kl_byKey","Map","__kl_remove","entry","disposer","dispose","delete","removeChild","__kl_first","length","frag","ownerDocument","createDocumentFragment","i","push","set","appendChild","clear","__kl_prev","__kl_reconcile","arr","changes","aipuPatchable","change","arix","aipu","itemDirty","newValue","superseded","j","dirtyOnly","type","raw","patched","structural","aipuOnly","a","b","entryA","entryB","newAKey","newBKey","refB","nextSibling","insertBefore","onlyAppends","appendCount","count","start","onlyRemoves","totalRemoved","splice","removed","sort","newLen","oldLen","nextEntries","newKeys","textContent","diffA","diffB","diffCount","disjoint","existing","nextNodes","replaceChildren","_i","seenOld","fill","oldIdx","nextRef","observe","off","_value","add"],"sources":["../src/components/combobox.tsx"],"sourcesContent":["import * as combobox from '@zag-js/combobox'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class Combobox extends ZagComponent {\n declare open: boolean\n declare value: string[]\n declare inputValue: string\n declare filteredItems: any[]\n declare _allItems: any[]\n\n created(props: any) {\n this._allItems = props.items || []\n this.filteredItems = [...this._allItems]\n super.created(props)\n }\n\n createMachine(_props: any): any {\n return combobox.machine\n }\n\n _buildCollection(items: any[]) {\n return combobox.collection({\n items,\n itemToValue: (item: any) => item.value,\n itemToString: (item: any) => item.label || item.value,\n })\n }\n\n _filterItems(query: string) {\n const q = query.toLowerCase()\n const filtered = q\n ? this._allItems.filter((item: any) => (item.label || item.value).toLowerCase().includes(q))\n : [...this._allItems]\n this.filteredItems = filtered\n this._machine?.updateProps({ collection: this._buildCollection(filtered) })\n }\n\n getMachineProps(props: any) {\n const col = props.collection || this._buildCollection(this._allItems)\n\n return {\n id: this.id,\n collection: col,\n value: props.value,\n defaultValue: props.defaultValue,\n inputValue: props.inputValue,\n defaultInputValue: props.defaultInputValue,\n open: props.open,\n defaultOpen: props.defaultOpen,\n multiple: props.multiple,\n disabled: props.disabled,\n readOnly: props.readOnly,\n invalid: props.invalid,\n required: props.required,\n placeholder: props.placeholder,\n inputBehavior: props.inputBehavior ?? 'none',\n selectionBehavior: props.selectionBehavior ?? 'replace',\n closeOnSelect: props.closeOnSelect ?? true,\n allowCustomValue: props.allowCustomValue,\n loopFocus: props.loopFocus ?? true,\n openOnClick: props.openOnClick ?? false,\n name: props.name,\n form: props.form,\n positioning: props.positioning,\n onValueChange: (details: combobox.ValueChangeDetails) => {\n this.value = details.value\n props.onValueChange?.(details)\n },\n onInputValueChange: (details: combobox.InputValueChangeDetails) => {\n this.inputValue = details.inputValue\n this._filterItems(details.inputValue)\n props.onInputValueChange?.(details)\n },\n onOpenChange: (details: combobox.OpenChangeDetails) => {\n this.open = details.open\n props.onOpenChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return combobox.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"label\"]': 'getLabelProps',\n '[data-part=\"control\"]': 'getControlProps',\n '[data-part=\"input\"]': 'getInputProps',\n '[data-part=\"trigger\"]': 'getTriggerProps',\n '[data-part=\"clear-trigger\"]': 'getClearTriggerProps',\n '[data-part=\"positioner\"]': 'getPositionerProps',\n '[data-part=\"content\"]': 'getContentProps',\n '[data-part=\"list\"]': 'getListProps',\n '[data-part=\"item\"]': (api, el) => {\n const value = (el as HTMLElement).dataset.value\n const label = (el as HTMLElement).dataset.label || value\n return api.getItemProps({ item: { value, label } })\n },\n '[data-part=\"item-text\"]': (api, el) => {\n const value = (el as HTMLElement).dataset.value\n const label = (el as HTMLElement).dataset.label || value\n return api.getItemTextProps({ item: { value, label } })\n },\n '[data-part=\"item-indicator\"]': (api, el) => {\n const value = (el as HTMLElement).dataset.value\n const label = (el as HTMLElement).dataset.label || value\n return api.getItemIndicatorProps({ item: { value, label } })\n },\n }\n }\n\n syncState(api: any) {\n this.open = api.open\n this.value = api.value\n this.inputValue = api.inputValue\n }\n\n template(props: any) {\n return (\n <div data-part=\"root\" class={props.class || ''}>\n {props.label && (\n <label data-part=\"label\" class=\"combobox-label text-sm font-medium mb-1 block\">\n {props.label}\n </label>\n )}\n <div data-part=\"control\" class=\"combobox-control flex\">\n <input\n data-part=\"input\"\n class=\"combobox-input flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring\"\n />\n <button\n data-part=\"trigger\"\n class=\"combobox-trigger inline-flex h-9 items-center justify-center rounded-r-md border border-l-0 border-input px-2\"\n >\n ▼\n </button>\n </div>\n <div data-part=\"positioner\" class=\"combobox-positioner\">\n <div\n data-part=\"content\"\n class=\"combobox-content z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n <div data-part=\"list\">\n {this.filteredItems.map((item: any) => (\n <div\n key={item.value}\n data-part=\"item\"\n data-value={item.value}\n data-label={item.label}\n class=\"combobox-item relative flex cursor-pointer select-none items-center rounded-xs px-2 py-1.5 text-sm outline-hidden data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground\"\n >\n <span data-part=\"item-text\" data-value={item.value} data-label={item.label}>\n {item.label}\n </span>\n <span\n data-part=\"item-indicator\"\n data-value={item.value}\n data-label={item.label}\n class=\"combobox-item-indicator ml-auto\"\n >\n ✓\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n )\n }\n}\n"],"mappings":"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"}
|
|
@@ -39,7 +39,8 @@ var CompiledComponent = class CompiledComponent {
|
|
|
39
39
|
configurable: true,
|
|
40
40
|
get: () => thunks[k]()
|
|
41
41
|
});
|
|
42
|
-
|
|
42
|
+
const childrenThunk = thunks.children;
|
|
43
|
+
if (typeof childrenThunk === "function") {
|
|
43
44
|
let cached = void 0;
|
|
44
45
|
let cacheNode = false;
|
|
45
46
|
Object.defineProperty(out, "children", {
|
|
@@ -47,8 +48,8 @@ var CompiledComponent = class CompiledComponent {
|
|
|
47
48
|
configurable: true,
|
|
48
49
|
get: () => {
|
|
49
50
|
if (cacheNode) return cached;
|
|
50
|
-
const v =
|
|
51
|
-
if (v && typeof v.nodeType === "number") {
|
|
51
|
+
const v = childrenThunk();
|
|
52
|
+
if (v !== null && typeof v === "object" && typeof v.nodeType === "number") {
|
|
52
53
|
cached = v;
|
|
53
54
|
cacheNode = true;
|
|
54
55
|
}
|
|
@@ -79,18 +80,19 @@ var CompiledComponent = class CompiledComponent {
|
|
|
79
80
|
}
|
|
80
81
|
let node = this[GEA_CREATE_TEMPLATE](this[GEA_DISPOSER]);
|
|
81
82
|
if (node == null) node = document.createComment("");
|
|
82
|
-
if (
|
|
83
|
+
if (Array.isArray(node)) {
|
|
83
84
|
const frag = document.createDocumentFragment();
|
|
84
85
|
for (const n of node) {
|
|
85
86
|
if (n == null) continue;
|
|
86
|
-
if (typeof n.nodeType === "number") frag.appendChild(n);
|
|
87
|
+
if (n !== null && typeof n === "object" && typeof n.nodeType === "number") frag.appendChild(n);
|
|
87
88
|
else frag.appendChild(document.createTextNode(String(n)));
|
|
88
89
|
}
|
|
89
90
|
node = frag;
|
|
90
|
-
} else node = document.createTextNode(String(node));
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
} else if (!(node !== null && typeof node === "object" && typeof node.nodeType === "number")) node = document.createTextNode(String(node));
|
|
92
|
+
const domNode = node;
|
|
93
|
+
parent.appendChild(domNode);
|
|
94
|
+
if (domNode.nodeType === 11) this[GEA_ELEMENT] = parent.lastElementChild ?? null;
|
|
95
|
+
else if (domNode.nodeType === 1) this[GEA_ELEMENT] = domNode;
|
|
94
96
|
const el = this[GEA_ELEMENT];
|
|
95
97
|
if (el) el[GEA_DOM_COMPONENT] = this;
|
|
96
98
|
this.rendered = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiled-component.mjs","names":[],"sources":["../src/utils/cn.ts","../../gea/src/runtime/compiled-component.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { GEA_CREATE_TEMPLATE, GEA_DOM_COMPONENT, GEA_ELEMENT, GEA_ON_PROP_CHANGE } from './symbols'\nimport { GEA_CREATED_CALLED, GEA_DISPOSER, GEA_SET_PROPS } from './internal-symbols'\nimport { createDisposer, type Disposer } from './disposer'\nimport { getComponentId } from './component-id'\n\ntype PropThunks =
|
|
1
|
+
{"version":3,"file":"compiled-component.mjs","names":[],"sources":["../src/utils/cn.ts","../../gea/src/runtime/compiled-component.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { GEA_CREATE_TEMPLATE, GEA_DOM_COMPONENT, GEA_ELEMENT, GEA_ON_PROP_CHANGE } from './symbols'\nimport { GEA_CREATED_CALLED, GEA_DISPOSER, GEA_SET_PROPS } from './internal-symbols'\nimport { createDisposer, type Disposer } from './disposer'\nimport { getComponentId } from './component-id'\nimport type { Renderable } from './renderable'\n\n/**\n * One thunk per prop of `P`, each returning that prop's own type.\n *\n * Generic rather than a flat dictionary so a component's props keep their\n * declared types all the way through `GEA_SET_PROPS` — the compiler emits one\n * thunk per JSX attribute, so the mapping is exact at every instantiation.\n *\n * `children` is intersected in separately (not folded into the mapped part)\n * because JSX always permits a childless invocation regardless of whether\n * `P` declares a `children` field — the compiler attaches a children thunk\n * whenever the call site has JSX children, independent of `P`'s own shape.\n */\ntype PropThunks<P> = { [K in keyof P]: () => P[K] } & { children?: () => Renderable }\nconst GEA_COMPONENT_ID: unique symbol = Symbol()\nconst GEA_LAST_PROP_VALUES: unique symbol = Symbol()\n\nexport class CompiledComponent<P extends Record<string, any> = Record<string, any>> {\n rendered = false\n props: P = {} as P;\n\n [GEA_ELEMENT] = null as HTMLElement | null;\n [GEA_DISPOSER] = createDisposer() as Disposer;\n [GEA_CREATED_CALLED] = false;\n [GEA_COMPONENT_ID]?: string;\n [GEA_LAST_PROP_VALUES]?: Partial<P>;\n [GEA_ON_PROP_CHANGE]?(key: string, next: unknown): void\n\n get id(): string {\n return (this[GEA_COMPONENT_ID] ??= getComponentId())\n }\n\n set id(value: string) {\n this[GEA_COMPONENT_ID] = value\n }\n\n get el(): HTMLElement | null {\n return this[GEA_ELEMENT] ?? null\n }\n\n [GEA_SET_PROPS](thunks: PropThunks<P>): void {\n const createdCalled = this[GEA_CREATED_CALLED]\n const notifyPropChange = createdCalled ? this[GEA_ON_PROP_CHANGE] : undefined\n const prevValues: Partial<P> | undefined =\n typeof notifyPropChange === 'function' ? this[GEA_LAST_PROP_VALUES] : undefined\n // `out` is `P` under construction — every key comes from `PropThunks<P>`\n // (i.e. `keyof P`) and every getter yields `P[K]`, so `Partial<P>` is the\n // exact in-progress type; the final `as P` merely asserts completion.\n const out: Partial<P> = {}\n for (const k in thunks) {\n Object.defineProperty(out, k, {\n enumerable: true,\n configurable: true,\n get: () => thunks[k](),\n })\n }\n const childrenThunk = thunks.children\n if (typeof childrenThunk === 'function') {\n let cached: Renderable = undefined\n let cacheNode = false\n Object.defineProperty(out, 'children', {\n enumerable: true,\n configurable: true,\n get: () => {\n if (cacheNode) return cached\n const v = childrenThunk()\n if (v !== null && typeof v === 'object' && typeof (v as Node).nodeType === 'number') {\n cached = v\n cacheNode = true\n }\n return v\n },\n })\n }\n this.props = out as P\n const nextValues: Partial<P> = {}\n for (const key in thunks) nextValues[key as keyof P] = this.props?.[key as keyof P]\n this[GEA_LAST_PROP_VALUES] = nextValues\n if (!createdCalled) {\n this[GEA_CREATED_CALLED] = true\n if (this.created !== CompiledComponent.prototype.created) this.created(this.props)\n } else if (typeof notifyPropChange === 'function') {\n for (const key in thunks) {\n const prev = prevValues?.[key as keyof P]\n const next = this.props?.[key as keyof P]\n if (next !== prev || (prev !== null && typeof prev === 'object')) notifyPropChange.call(this, key, next)\n }\n }\n }\n\n [GEA_CREATE_TEMPLATE](_disposer: Disposer): Renderable {\n return document.createDocumentFragment()\n }\n\n render(parent: Node, _index?: number): void {\n if (!this[GEA_CREATED_CALLED]) {\n this[GEA_CREATED_CALLED] = true\n if (this.created !== CompiledComponent.prototype.created) this.created(this.props)\n }\n let node: Renderable = this[GEA_CREATE_TEMPLATE](this[GEA_DISPOSER])\n if (node == null) node = document.createComment('')\n if (Array.isArray(node)) {\n const frag = document.createDocumentFragment()\n for (const n of node) {\n if (n == null) continue\n if (n !== null && typeof n === 'object' && typeof (n as Node).nodeType === 'number') frag.appendChild(n as Node)\n else frag.appendChild(document.createTextNode(String(n)))\n }\n node = frag\n } else if (!(node !== null && typeof node === 'object' && typeof (node as Node).nodeType === 'number')) {\n node = document.createTextNode(String(node))\n }\n // By this point `node` is always a genuine Node: either it already was one,\n // or the branches above just replaced it with one (a fragment or a text\n // node). TS's control-flow analysis can't carry that invariant through the\n // `Array.isArray` / `typeof` chain above, so state it once here instead of\n // re-asserting `as Node` at every remaining use.\n const domNode = node as Node\n parent.appendChild(domNode)\n if (domNode.nodeType === 11) {\n this[GEA_ELEMENT] = ((parent as Element).lastElementChild as HTMLElement | null) ?? null\n } else if (domNode.nodeType === 1) {\n this[GEA_ELEMENT] = domNode as HTMLElement\n }\n const el = this[GEA_ELEMENT]\n if (el) (el as HTMLElement & { [GEA_DOM_COMPONENT]?: unknown })[GEA_DOM_COMPONENT] = this\n this.rendered = true\n this.onAfterRender()\n }\n\n onAfterRender(): void {\n /* no-op */\n }\n\n created(_props?: P): void {\n /* no-op */\n }\n\n dispose(): void {\n this[GEA_DISPOSER].dispose()\n const e = this[GEA_ELEMENT] as HTMLElement | null\n if (e && e.parentNode) e.parentNode.removeChild(e)\n this[GEA_ELEMENT] = null\n }\n\n $(sel: string): Element | null {\n const e = this[GEA_ELEMENT] as HTMLElement | null\n return e ? e.querySelector(sel) : null\n }\n\n $$(sel: string): Element[] {\n const e = this[GEA_ELEMENT] as HTMLElement | null\n return e ? Array.from(e.querySelectorAll(sel)) : []\n }\n}\n\nexport default CompiledComponent\n"],"mappings":"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"}
|